我在执行动态SQL Server代码时遇到问题。
我在临时表中插入了一个字符,字符数超过4000。 我试图拆分成两个变量,然后将它们串联起来,但问题是
EXEC sp_executesql @sql,
N'@DimStartDate int, @DimEndDate bigint',
@DimStartDate, @DimEndDate;
我在网上发现EXEC(@sql1+@sql2)
是解决方案,但我确实需要输入参数。我该怎么解决?
答案 0 :(得分:1)
我以前处理过类似的问题,如下所示。基本上,您需要将主查询分成多个部分,最后将它们组合在一起,并使用sp_EXECUTESQL运行动态查询。
SelectRecipeActivity
答案 1 :(得分:1)
对于很长的字符串,sp_executesql
没问题。您只需要声明查询足够长的时间即可:
declare @sql nvarchar(max);
如果行长对于表来说太长,则插入表中会出错。这与动态语句无关。在SQL Server中,行的最大长度受到限制-尽管您可以使用长字符串和blob来解决该问题。
答案 2 :(得分:1)
不确定确切的问题出在哪里。 SQL Server将愉快地执行4,000个以上的字符,因此您的SQL必须在其他地方被截断。这是一个示例,其中我手动建立了一个总计超过4,000个字符的批处理,因此您可以看到所有三个SELECT
语句都在运行,如果复制并粘贴中间结果,您将看到它具有y结尾:
DECLARE @sql nvarchar(max) = N'SELECT 1;'
+ N'SELECT ''' + CONVERT(nvarchar(max), REPLICATE('x', 4096)) + N'y'';';
+ N'SELECT 2;';
EXEC sys.sp_executesql @sql;
结果: