Как мне выполнить очень длинный динамический SQL-оператор? - PullRequest
4 голосов
/ 07 июля 2010

Я помню, как в прошлый день я делал целую кучу nvarchar(4000) переменных, проверял их длину по мере их роста, выключал их по мере заполнения и затем объединял весь беспорядок для вызова exec. Мне было интересно, есть ли более простой способ сделать это.

Спасибо! * * 1004

Edit:

Пример кода, показывает, как я облажался с регистром

DECLARE @sql NVARCHAR(MAX)
SELECT @sql = CAST(N'SELECT ' AS NVARCHAR(MAX))

DECLARE @Index INT
SELECT @Index = 0

WHILE (@Index < 1000)
BEGIN
 SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(N'          ' AS NVARCHAR(MAX)) + CAST( CASE @Index WHEN 1 THEN N' ' END AS NVARCHAR(MAX))
 SELECT @Index = @Index + 1
END
SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(1 AS NVARCHAR(MAX))

SELECT LEN(@sql)
EXECUTE sp_executesql @sql

Ответы [ 2 ]

7 голосов
/ 07 июля 2010

sp_executesql принимает параметр типа NVARCHAR (MAX), который может увеличиваться до 2 ГБ.Никакой уловки не требуется, поскольку тип NVARCHAR (MAX) поддерживает все строковые операции (конкатенация, замена и т. Д.):

[ @statement= ] statement

Is a Unicode string that contains a Transact-SQL statement or batch.

оператор долженбыть либо константой Unicode, либо переменной Unicode.Более сложные выражения Unicode, такие как объединение двух строк с оператором +, не допускаются.Символьные константы не допускаются.Если указана константа Unicode, перед ней должен стоять префикс N. Например, константа Unicode N'sp_who 'допустима, а символьная константа' sp_who '- нет. Размер строки ограничен только доступной памятью сервера базы данных.На 64-битных серверах размер строки ограничен 2 ГБ, максимальный размер nvarchar (max).

2 голосов
/ 07 июля 2010

EXEC (@YourSQL) ИЛИ sp_exectesql, если вы хотите продолжить сборку на вашем динамическом SQL и выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...