выполнить sp_executesql по длине в SQL Server - PullRequest
0 голосов
/ 05 декабря 2018

Моя версия SQL Server - SQL Server 2008 R2.

В операторе in содержится около 100 строк.

Я использую этот SQL для выполнения динамического запроса:

DECLARE @DynamicDate nvarchar(100) 
DECLARE @SQLString_1 nvarchar(max)

SET @DynamicDate='20181021'
SET @SQLString_1 =  
     N'select  *    
 from T1_'+@DynamicDate+' w      
 left join      
 T2 c      
 on w.ASSET_ID=c.DEVICE_ID      
 left join      
 T3 cm      
 on c.DEVICE_ID=cm.ASSET_ID      
 left join      
 T4 gm      
 on cm.GROUP_ID=gm.GROUP_ID      
 left join      
 T5 em      
 on w.EVENT_ID =em.EVENT_ID      
 and w.EVENT_CATEGORY_ID=em.EVENT_CATEGORY_ID      
 left join T6 sa      
 on w.PROCESS_NAME=sa.PROCESS_NAME
 where 
 w.ASSET_ID in (''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
   ……
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}''
)
 '
print(@SQLString_1)
--EXECUTE sp_executesql @SQLString_1

Когда я печатаю sql.Выводу нравится это:

select                   
 *    
 from T1_20181021 w      
 left join      
 T2 c      
 on w.ASSET_ID=c.DEVICE_ID      
 left join      
 T3 cm      
 on c.DEVICE_ID=cm.ASSET_ID      
 left join      
 T4 gm      
 on cm.GROUP_ID=gm.GROUP_ID      
 left join      
 T5 em      
 on w.EVENT_ID =em.EVENT_ID      
 and w.EVENT_CATEGORY_ID=em.EVENT_CATEGORY_ID      
 left join T6 sa      
 on w.PROCESS_NAME=sa.PROCESS_NAME
 where 
 w.ASSET_ID in (
'{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}',
'{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}',
  ……
'{XXXXXXXX-XXXX

Была напечатана только его часть.

Когда я использую sp_executesql @SQLString_1

Ошибка:

Сообщение 105, уровень 15, состояние 1 и строка 96 Цитата не закрывается после строки «{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}».Сообщение 102, уровень 15, состояние 1, строка 96 Недопустимый синтаксис в окрестности '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'.

Я использовал ключевое слово max в @SQLString_1,

Так что я не могу использовать execute sp_executesql`, похоже, оно не работает.

Как я могу это исправить?

1 Ответ

0 голосов
/ 05 декабря 2018

О печатной части вашего вопроса, print ограничен 4000 символами.Если вы хотите вывести более длинный текст в консоль, вы можете напечатать его на чанках следующим образом:

print substring(@SQLString_1,    1, 4000)
print substring(@SQLString_1, 4001, 4000)
print substring(@SQLString_1, 8001, 4000)

Добавьте столько 4k чанков, сколько необходимо.Каждая команда будет печатать свой чанк в новой строке, поэтому ваш запрос будет немного зашифрован, но эти дополнительные разрывы строк легко найти и исправить:

левое соединение T6 sa
на w.PROCES <- Найти это место и объединить строки, чтобы получить исходный запрос </p>

S_NAME = sa.PROCESS_NAME

где

Об ошибке запросаВаша строка запроса выглядит преобразованной в не максимальный тип, таким образом, обрезается до 4000 символов.Проверьте свои объединения.Примените ваши не max части к nvarchar (max), если необходимо.

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