Выполнение больших запросов SQL

#sql-server

#sql-сервер

Вопрос:

Я пытаюсь выполнить динамически созданный запрос, используя SQL-функцию FORMATMESSAGE, и когда я это делаю, я получаю сообщение об ошибке

Неправильный синтаксис рядом с ‘.’

я предполагаю, что это связано с созданным обрезанным SQL-запросом.

 set @sql = FORMATMESSAGE('insert into %s (imported_on, source_filename, md5_hash %s) select GETDATE(), ''%s'', ''%s'' %s from %s',
                  @target_tablename, @columns, @source_filename, 'TODO', @columns, @source_table);
exec (@sql);
 

Существует длинный список столбцов, в котором переменная @columns содержит ~ 300 (столбцов), а длина превышает 4000. Переменные @columns и @sql оба имеют тип nvarchar(max) .

Я видел другие сообщения, в которых рекомендуется разделение на несколько переменных, но также следует упомянуть nvarchar(max) , что это должно сработать. Я понятия не имею, как поступить, если я не должен был разделять строку.

Спасибо

Ответ №1:

Выполните конкатенацию строк самостоятельно.

 declare @sql nvarchar(max);

set @sql = convert(nvarchar(max), '')
           'insert into '   @target_tablename   '(imported_on, ....
exec (@sql);