Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Ejecutar NTEXT (https://www.clubdelphi.com/foros/showthread.php?t=58751)

sinalocarlos 30-07-2008 17:48:50

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

TOPX 30-07-2008 19:47:37

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.

olbeup 13-11-2008 01:08:10

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.;):D

sinalocarlos 13-11-2008 01:34:50

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


La franja horaria es GMT +2. Ahora son las 05:42:10.

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