#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);