SQL Server - query dinamica

   
Vista:

query dinamica

Publicado por JAVIER (7 intervenciones) el 25/01/2018 20:19:26
Estimados.


estoy haciendo un SP que ejecuta querys dinamicas.

el problemas es que los ejecutaba con executesql pero solo permite tipo de dato nvarchar y nvachar se limita a 4000 caracteres.

la query tiene 7000 caracteres y ahora la estoy ejecutando con variable varchar(max) con EXEC(@query),
pero a pesar que la query cabe en el varchar el exec parece que los acorta a 4000



si a alguien le pasó este escenario y lo solucionó xfavor :'-
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

query dinamica

Publicado por Isaias (3718 intervenciones) el 25/01/2018 22:07:46
Que extraño Javier

Esto lo tome del BOL de SQL Server

sp_executesql [ @stmt = ] statement

[ @stmt=] instrucción
Es una cadena Unicode que contiene un Transact-SQL instrucción o lote. @stmtdebe ser una constante Unicode o una variable Unicode. No se permite utilizar expresiones Unicode más complejas, como una concatenación de dos cadenas con el operador +. Las constantes de caracteres no están permitidas. Si se especifica una constante Unicode, debe ir precedida de un N. Por ejemplo, la constante Unicode N 'sp_who' es válido, pero la constante de caracteres 'sp_who' no es. El tamaño de la cadena solo está limitado por la memoria disponible en el servidor de bases de datos. En los servidores de 64 bits, el tamaño de la cadena se limita a 2 GB, el tamaño máximo de nvarchar (max).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

query dinamica

Publicado por jams (93 intervenciones) el 26/01/2018 21:24:43
Me voy a permitir reproducir algo que había publicado

Buenos días ojala que pueda explicarme, lo que necesitas hacer es redefinir el campo como varchar(max)

ejemplo UNO

declare @tabla table(campo1 varchar(max))

insert into @tabla values(REPLICATE('A',8500))
select campo1 tamano from @tabla

El select solo te regresa 8000 caracteres

Ejemplo DOS

declare @tabla table(campo1 varchar(max))

insert into @tabla values(REPLICATE(cast('A' as varchar(max)),8500))

select campo1 tamano from @tabla


el select ahora te regresa los 8,500 caracteres

Analiza ambos ejemplos y encontraras que la diferencia principal es la re definición de el carácter que se inserta en este caso 8500 veces

espero te sirva
si tienes alguna duda adicional te paso la siguiente liga, es de un verdadero guru de sql server Pinal Dave

https://blog.sqlauthority.com/2013/05/13/sql-server-puzzle-and-answer-replicate-over-8000-characters/



Saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

query dinamica

Publicado por JAVIER (7 intervenciones) el 26/01/2018 21:43:28
osea cuando redefines la variable se duplica su capacidad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad