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个字节的限制,则结果将被截断。但是,如果串联的字符串中的至少一个是大值类型,则不会发生截断。”