相关疑难解决方法(0)

SQL NVARCHAR和VARCHAR限制

总之,我有一个很大的(不可避免的)动态SQL查询.由于选择标准中的字段数,包含动态SQL的字符串增长超过4000个字符.现在,我知道有一个4000最大值设置NVARCHAR(MAX),但查看Server Profiler中执行的SQL语句

DELARE @SQL NVARCHAR(MAX);
SET @SQL = 'SomeMassiveString > 4000 chars...';
EXEC(@SQL);
GO
Run Code Online (Sandbox Code Playgroud)

似乎工作(!?),对于另一个同样大的查询,它会抛出一个与此4000限制(!?)相关的错误,它基本上修剪了这个4000限制之后的所有SQL,并且给我留下了语法错误.尽管这样的探查,它表示在这个动态的SQL查询(!?).

究竟发生了什么,我应该将这个@SQL变量转换为VARCHAR并继续使用它吗?

谢谢你的时间.

PS.能够打印超过4000个字符来查看这些大查询也是很好的.以下限制为4000

SELECT CONVERT(XML, @SQL);
PRINT(@SQL);
Run Code Online (Sandbox Code Playgroud)

还有其他很酷的方式吗?

sql sql-server variables string-concatenation sql-server-2008

97
推荐指数
2
解决办法
17万
查看次数

nvarchar(max)仍然被截断

所以我在MS SQL Server 2008中编写了一个存储过程.这是一个非常长的查询,我必须动态编写它,所以我创建一个名为的变量@Query并使其成为类型NVARCHAR(MAX).现在,我被告知在现代版本的SQL Server中,NVARCHAR(MAX)可以容纳一大堆数据,比最初的4000个字符最多.但是,@Query当我尝试将其打印出来时,仍会被截断为4000个字符.

DECLARE @Query NVARCHAR(max);
SET @Query = 'SELECT...' -- some of the query gets set here
SET @Query = @Query + '...' -- more query gets added on, etc.

-- later on...
PRINT LEN(@Query) -- Prints out 4273, which is correct as far as I can tell
PRINT @Query      -- Truncates value to 4000 characters
EXEC sp_executesql @Query -- totally crashes due to malformed (truncated) query …
Run Code Online (Sandbox Code Playgroud)

sql dynamic-sql sql-server-2008

52
推荐指数
6
解决办法
10万
查看次数

T-SQL VARCHAR(MAX)截断

DECLARE @str VARCHAR (MAX);

SELECT @str = COALESCE(@str + CHAR(10), '') +
       'EXECUTE CreateDeno ' + CAST(ID AS VARCHAR) 
FROM   GL_To_Batch_Details
WHERE  TYPE = 'C' AND
       Deno_ID IS NULL;

--PRINT @str;--SELECT @str;
**EXEC(@str);**
Run Code Online (Sandbox Code Playgroud)

EDITED

EXECUTE语句是否将字符串截断为8,000个字符PRINT?如何执行具有超过8,000个字符的动态SQL语句?

任何建议都会受到热烈的赞赏.

t-sql

9
推荐指数
2
解决办法
3万
查看次数