Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2008
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
Ejecutar NTEXT

Señores aquí vengo molestando con una cuestión que me tiene dándole vueltas

por azares del destino, en un procedimiento que estoy modificando, armo una cadena de texto, necesariamente unicode, que contiene una instrucción a a ejecutarse (la declaración de un procedimiento o de una vista), lamentablemente el tipo de variable nvarchar permite solo 4000 caracteres y para efectos de lo que necesito hacer debo de manejar algo mas de espacio, ahora bien SQL no me permite declarar variables ntext dentro de un procedimiento, para sacarle la vuelta a este inconveniente, creo una tabla temporal con los campos del tipo ntext y perfecto ahí concateno mi súper cadena de mas de 4000 caracteres el problema de esto es que no encuentro la manera de ejecutar el texto que guardo en mi tabla temporal, esto es, ocupo hacer algo asi como:

Cita:
EXEC SELECT Campo FROM TablaTemp
Obviamente si escribo lo anterior SQL me tira con un error del tipo

Cita:
Server: Msg 156, Level 15, State 1, Line 1
NO SEAS BURRO NO SE PUEDE.
Ahora si la pregunta:

Se puede ejecutar el contendido de un campo ntext sin tener que pasarlo a una variable? (no puedo declarar variables ntext dentro de un SP)

O en su caso, puedo de alguna forma declarar un campo NTEXT o algo por el estilo dentro de un SP

Muchas gracias por su tiempo

Última edición por sinalocarlos fecha: 30-07-2008 a las 18:10:14. Razón: me faltaron etiquetas
Responder Con Cita
  #2  
Antiguo 30-07-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Desde MsSql 7 a 2k, se podría haber usado xp_execresultset, ahora para MsSql 2k5 habría que reemplazarlo. Pero sí parece ser la idea de lo que anda buscando.
__________________
"constructive mind, destructive thoughts"

Última edición por TOPX fecha: 30-07-2008 a las 19:52:10.
Responder Con Cita
  #3  
Antiguo 13-11-2008
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Thumbs up

Hola sinalocarlos,

Lo que pretendes hacer, se puede y de echo yo lo estoy utilizando en mis aplicaciones.

Te pongo un ejemplo con una tabla temporal, ya tu utilízala como más te guste:

Código SQL [-]
-- Creamos la tabla que contendrán todas las sentencias SQL's
CREATE TABLE #SQLSentencias
(
  IDSQLTEXT  smallint IDENTITY(1,1)
  ,SQLTEXT  varchar(8000)
)

-- Creo el Indice, me gusta crearlo así
CREATE INDEX PK_IDSQLTEXT ON #SQLSentencias(IDSQLTEXT)

-- Añadir todas las sql's de la aplicación en la BD
INSERT INTO #SQLSentencias(SQLTEXT)
VALUES('SELECT * FROM master..sysobjects')

INSERT INTO #SQLSentencias(SQLTEXT)
VALUES('SELECT * FROM master..sysobjects ORDER BY name')

-- Declaro una variable la cual será la contenedora de la sentencia
DECLARE
  @sqlText varchar(8000)

-- Obtengo la primera sentencia y la guardo
SET @sqlText = 
  (SELECT SQLTEXT FROM #SQLSentencias WHERE IDSQLTEXT = 1)

-- Ejecuto la sentencia
EXEC(@sqlText)

-- Obtengo la segunda sentencia y la guardo
SET @sqlText = 
  (SELECT SQLTEXT FROM #SQLSentencias WHERE IDSQLTEXT = 2)

-- Ejecuto la sentencia
EXEC(@sqlText)

Espero que te sirva, mas vale tarde, que nunca.

Un saludo.
Responder Con Cita
  #4  
Antiguo 13-11-2008
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
Antes que nada muchas gracias, como dices mas vale tarde que nunca.

De hecho el miniproyecto donde iva a necesitar esta parte quedo en hold, desde sep y ya no he tenido tiempo para invertirle.

el problema es que en efecto ya tengo un procedimiento que se asemeja bastante al que me haces el favor de subir, en mi caso uso un cursor para navegar entre los registros etc etc, el problema que me surgio es que necesito utilizar unicode, la razon la olvide (tal vez mi primo aleman alzheimer sea el causante), entonces ahi es donde surgio el detalle varchar acepta en efecto hasta 8000 caracteres pero nvarchar solo 4000 y ahi es donde necesito algo como ntext que aunque acepta unicode tiene el inconveniente que no es permitido dentro de procedimientos almacenados, y en este momento no recuerdo si al menos es aceptado en el EXEC.


Gracias, en cuanto me desocupe de lo actual y pueda lograr un avance regreso por aqui

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar un .exe jorgegetafe Varios 25 08-08-2007 18:30:54
Recuperar campo ntext de SQL Server El_TxEtXu SQL 1 25-05-2006 11:32:42
Ejecutar Dll 3XEMIK3 Impresión 1 23-01-2006 16:56:19
Grabar un TRichMemo muy grande en un nText del SQL Server 2000 gcaffe SQL 1 29-11-2005 02:14:03
Ejecutar un .EXE con una .GDB Gustavo Gowdak Conexión con bases de datos 1 17-12-2004 09:42:37


La franja horaria es GMT +2. Ahora son las 18:52:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi