SQL Server动态SQL大小超过4000个字符

时间:2018-08-14 13:03:28

标签: sql-server dynamic-sql nvarchar

在SQL Server中,我具有动态sql查询,但是查询的大小大于4000个字符。 就像在这篇文章SQL Server 2012: dynamic SQL limitation ( > 4000 chars) (split)中一样,解决此问题没有问题。 但是问题是当我想用变量连接字符串时。 例如,这可以正常工作:

DECLARE @sqlQuery NVARCHAR(MAX);
DECLARE @sqlQueryWhere NVARCHAR(MAX);

SET @sqlQuery =
    CONVERT(nvarchar(max),'SELECT
 .... '
EXECUTE sp_executesql @sqlQuery

但是此示例无效:

 DECLARE @sqlQuery NVARCHAR(MAX);
 DECLARE @sqlQueryWhere NVARCHAR(MAX);

SET @sqlQueryWhere = CONVERT(nvarchar(max),' 1 = 1 ' )

SET @sqlQuery =
        CONVERT(nvarchar(max),'SELECT
     .... ' + @sqlQueryWhere + ' group by ... '
EXECUTE sp_executesql @sqlQuery

2 个答案:

答案 0 :(得分:1)

您的示例是错误的,因为您是在串联后进行

您的串联是一系列短字符串,不能超过4000个字符。那是。使用+不会神奇地使字符串超过4000个字符

I described it in my answer here

这将起作用:

DECLARE @sqlQuery NVARCHAR(MAX);
DECLARE @sqlQueryWhere NVARCHAR(MAX);
DECLARE @sqlQueryBase NVARCHAR(MAX);
DECLARE @sqlQueryGroupyBy NVARCHAR(MAX);

SET @sqlQueryWhere = N' 1 = 1 ' --already NVARCHAR(MAX)
SET @sqlQueryBase = N'SELECT
     .... '
SET @sqlQueryGroupyBy = N' group by ... '

SET @sqlQuery = CONCAT(@sqlQueryBase, @sqlQueryWhere @sqlQueryGroupyBy)

EXECUTE sp_executesql @sqlQuery

答案 1 :(得分:0)

4000个字符是4000个字符。如果我要突破该限制,我会希望为表加别名,创建视图或查看是否可以使用一些内联表有所帮助。