首页 > 解决方案 > 执行大型 SQL 查询

问题描述

我正在尝试使用 FORMATMESSAGE SQL 函数执行动态创建的查询,当我这样做时出现错误

'.' 附近的语法不正确

我假设这是因为创建了修剪后的 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)应该有效。如果我不拆分字符串,我不知道如何进行。

谢谢

标签: sql-server

解决方案


自己执行字符串连接。

declare @sql nvarchar(max);

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

推荐阅读