SQL 服务器动态 SQL 大小超过 4000 个字符
SQL Server dynamic SQL size exceed 4000 chars
在 SQL 服务器中我有动态 sql 查询,但查询的大小超过 4000 个字符。
就像在这个post 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
4000个字符就是4000个字符。如果我打破了这个限制,我会考虑为表设置别名、创建视图,或者看看您是否可以使用一些内联表来提供一些帮助。
你的样本是错误的,因为你在 after concatenation
您的连接是一系列不能超过 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
在 SQL 服务器中我有动态 sql 查询,但查询的大小超过 4000 个字符。 就像在这个post 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
4000个字符就是4000个字符。如果我打破了这个限制,我会考虑为表设置别名、创建视图,或者看看您是否可以使用一些内联表来提供一些帮助。
你的样本是错误的,因为你在 after concatenation
您的连接是一系列不能超过 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