代码之家  ›  专栏  ›  技术社区  ›  Biff MaGriff

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

  •  4
  • Biff MaGriff  · 技术社区  · 16 年前

    我记得那一天我会做一个完全疯狂的 nvarchar(4000) vars,在它们增长时检查它们的长度,在它们填满时将它们切换出来,然后将整个混乱连接在一起以进行exec调用。我想知道有没有更简单的方法。

    谢谢!

    编辑:

    代码示例,显示我把case语句搞砸了

    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 回复  |  直到 16 年前
        1
  •  10
  •   Remus Rusanu    16 年前

    sp_executesql 接受NVARCHAR(MAX)类型的参数,该参数最多可扩展到2GB。无需任何噱头,因为NVARCHAR(MAX)类型支持所有字符串操作(串联、替换等):

    [ @statement= ] statement

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

    语句必须是Unicode 复杂的Unicode表达式,例如 不允许使用常量。如果 如果指定了Unicode常量,则必须 前缀为N。例如, 有效,但字符为常量 “你是谁”不是。 大小 字符串仅受可用 数据库服务器内存。在64位上 限制为2 GB,最大大小为 nvarchar(最大值)。

        2
  •  2
  •   Eray Balkanli    7 年前

    EXEC (@YourSQL) 或者 sp_exectesql