EXEC sp_executesql @sql限制

时间:2019-03-04 15:51:30

标签: sql sql-server sql-server-2012

我在执行动态SQL Server代码时遇到问题。

我在临时表中插入了一个字符,字符数超过4000。 我试图拆分成两个变量,然后将它们串联起来,但问题是

EXEC sp_executesql @sql, 
                   N'@DimStartDate int, @DimEndDate bigint',
                   @DimStartDate, @DimEndDate;

我在网上发现EXEC(@sql1+@sql2)是解决方案,但我确实需要输入参数。我该怎么解决?

3 个答案:

答案 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;

结果:

enter image description here