如何执行一个非常长的动态sql语句?

Bif*_*iff 4 t-sql sql-server dynamic-sql

我记得在那一天我会做出一大堆nvarchar(4000)vars,随着它们的成长检查它们的长度,在它们填满时将它们切换出来然后将整个混乱连接在一起以进行exec调用.我想知道是否有更简单的方法.

谢谢!

编辑:

代码示例,显示我搞砸了案例陈述

DECLARE @sql NVARCHAR(MAX)
SELECT @sql = CAST(N'SELECT ' AS NVARCHAR(MAX))

DECLARE @Index INT
SELECT @Index = 0

WHILE (@Index < 1000)
BEGIN
 SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(N'          ' AS NVARCHAR(MAX)) + CAST( CASE @Index WHEN 1 THEN N' ' END AS NVARCHAR(MAX))
 SELECT @Index = @Index + 1
END
SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(1 AS NVARCHAR(MAX))

SELECT LEN(@sql)
EXECUTE sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 8

sp_executesql接受NVARCHAR(MAX)类型的参数,该参数可以增长到2GB.不需要任何噱头,因为NVARCHAR(MAX)类型支持所有字符串操作(连接,替换等):

[ @statement= ] statement

Is a Unicode string that contains a Transact-SQL statement or batch.
Run Code Online (Sandbox Code Playgroud)

语句必须是Unicode常量或Unicode变量.不允许使用更复杂的Unicode表达式,例如使用+运算符连接两个字符串.不允许使用字符常量.如果指定了Unicode常量,则必须以N为前缀.例如,Unicode常量N'sp_who'有效,但字符常量'sp_who'不是.字符串的大小仅受可用数据库服务器内存的限制.在64位服务器上,字符串的大小限制为2 GB,最大大小为nvarchar(max).