非常郁闷,由于要处理的表(动态的)的字段非常多,导致使用EXEC命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存储过程里调用执行,不知是否可行,如何实现,谢谢大家

解决方案 »

  1.   


    你可以定义多个变量来存储你的拼接字符串,然后再
    exec(@str1+@str2.....)
      

  2.   

    好的,我试试,还有一个问题
    如果是EXEC @RET=sp_executesql @sql,N'@i int',@i;这样的形式呢?这种形式用的最多,因为可以获得返回值
    而且我到现在还搞不清楚EXEC 和 sp_executesql在错误处理方面的区别,很多时候发现EXEC报错,但存储过程却不停止,还接着往下走,搞的整个处理都乱了套,而sp_executesql好像在传入的代码出现语法错误时也很难识别出错误来
      

  3.   


    master.dbo.xp_cmdShell 'sqlcmd -S IP地址 -U 用户名 -P 密码 -d 数据库 -i 文件全路径+名字'前提是xp_cmdshell必须开启才可以运行SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
    RECONFIGURE WITH OVERRIDE
    SP_CONFIGURE 'xp_cmdShell',1
    RECONFIGURE WITH OVERRIDE