mssql sqlserver 当exec中”动态sql脚本”超过8000个字符的处理方法分享


摘要:
我们平时在动态拼接sql脚本时,偶尔会出现sql脚本超过8000个字符,下文讲述一个适用于所有sql版本的方法,如下所示:
实验环境:sql server 2000 ,2005,2008,2010 …


在SQL Server 2000中,
exec在支持动态sql脚本的运行方面比sp_executesql强,主要在于exec可以支持多个变量的连接输入,使exec执行变量达到超个8000个字符,

当exec执行的sql脚本超过8000 时,我们可以采用多个字符串变量对其进行存储,然后放入exec中执行 。

    -----sqlserver 2000
     DECLARE @sql1  VARCHAR(8000), 
                   @sql2  VARCHAR(8000), 
                   @sql3  VARCHAR(8000);
 
    SET @sql1 = 'PRINT ''';
    SET @sql2 = REPLICATE('maomao',1000) + '.com';
    SET @sql3 = ''';';

   EXEC(@sql1 + @sql2 + @sql3);

在sqlserver 2005及以上版本,我们可以采用varchar(max)存储执行字符串,由于varchar(max)最大可以存储2G,所以可以在一个字符串变量中存储更多的字符串,如下所示:

        DECLARE @sql  VARCHAR(max) ;
 
    SET @sql = 'PRINT ''';
    SET @sql =@sql+ REPLICATE('maomao',8000) + '.com';
    SET @sql =@sql+ ''';';

   EXEC(@sql);