T-SQL VARCHAR(MAX)截断

Nic*_*net 9 t-sql

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语句?

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

JNK*_*JNK 16

PRINT 限制为8k输出.

SSMS结果窗格中还有8k限制.

工具 - >选项 - >查询结果

看看选项.

要验证实际数据的长度,请检查:

SELECT LEN(@str)


小智 5

当连接字符串时,结果为VARCHAR(MAX)类型且超过8000个字符,则串联中使用的至少一个参数和/或元素必须为VARCHAR(MAX)类型,否则结果字符串将被截断并且将无法在EXEC语句中执行。

例:

DECLARE @sql AS VARCHAR(MAX);
/* DECLARE @someItem AS VARCHAR(100); -- WILL CAUSE TRUNCATION WHEN @sql HAS LEN > 8000 */
DECLARE @someItem AS VARCHAR(MAX); -- All string variables need to be VARCHAR(MAX) when concatenating to another VARCHAR(MAX)

SET @someItem = 'Just assume the resulting @sql variable goes over 8000 characters...';
SET @sql = 'SELECT Something FROM Somewhere WHERE SomeField = ''' + @someItem + '''';

EXEC (@sql);
--PRINT @sql;
Run Code Online (Sandbox Code Playgroud)

有关MSDN的更多信息。

“如果字符串的连接结果超过了8,000个字节的限制,则结果将被截断。但是,如果串联的字符串中的至少一个是大值类型,则不会发生截断。”