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

时间:2010-07-06 21:36:22

标签: sql-server tsql 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

2 个答案:

答案 0 :(得分:7)

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

  

[ @statement= ] statement

Is a Unicode string that contains a Transact-SQL statement or batch.
     

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

答案 1 :(得分:2)

EXEC (@YourSQL) OR sp_exectesql如果您希望继续构建动态SQL并执行。