比如declare @sql nvarchar(max)
set @sql = ......
exec @sql
当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存储过程里调用执行,不知是否可行,如何实现,谢谢大家
4 个解决方案
#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
#4
你也可以这样试试,这个我也没试过
#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
#4
你也可以这样试试,这个我也没试过