紧急求助,如何在存储过程中调用和执行外部的sql脚本文件?

时间:2021-09-13 09:08:09
非常郁闷,由于要处理的表(动态的)的字段非常多,导致使用EXEC命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql

当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存储过程里调用执行,不知是否可行,如何实现,谢谢大家

4 个解决方案

#1


引用楼主  的回复:
非常郁闷,由于要处理的表(动态的)的字段非常多,导致使用EXEC命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql

当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存储过程里调用执行,不知是否……


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

#2


引用 1 楼  的回复:
引用楼主  的回复:
非常郁闷,由于要处理的表(动态的)的字段非常多,导致使用EXEC命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql

当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存……

好的,我试试,还有一个问题
如果是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命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql

当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存储过程里调用执行,不知是否……


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

#2


引用 1 楼  的回复:
引用楼主  的回复:
非常郁闷,由于要处理的表(动态的)的字段非常多,导致使用EXEC命令超出了最大的字符串长度
比如declare @sql nvarchar(max)
set @sql = ......
exec @sql

当@sql超过4000时就无法赋值了,导致错误,求教解决方案
由于表是动态的(很多表要做类似的处理),我想可能可以通过把所有的脚本写成一个个脚本文件,从存……

好的,我试试,还有一个问题
如果是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


你也可以这样试试,这个我也没试过