sql中exec支持多条命令的执行吗???

freetd 2009-09-07 04:48:42
如题所述,exec支持多条命令的执行吗?
    
declare @str1 varchar(8000),@str2 varchar(8000)
set @str1 = 'alter table [tablename] add .......'
set @str2 = 'insert into [tablename] (.....) select .... from [TableSource] '
exec(@str1) --第一次使用exec
exec(@str2) --第二次使用exec

除了上述的两次使用exec之外,能不能只用一次exec就把上面的两条语句都执行
就像exec(@str1 + @str2),但是这样写是不行的 ,如果说有方法可以一次性执行@str1和@str2,那么要怎么写才正确
...全文
576 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
freetd 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sql77 的回复:]
引用 19 楼 freetd 的回复:
那这样说只能是拆开来一条条地执行拉,哎!这样的话好麻烦

就这里的话不麻烦呀!!!
[/Quote]
怎么不麻烦,首先获得的SQL命令不知道有多少条,又要在每条语句间弄一个标式符,再写一个存储过程通过标式符把这些语句一条条截取出来单独去运行,这些工作说少不少说多不多.....如果是在代码中实现那就好了(起码调试的时候都好多了),但所有过程都要在存储过程中实现。郁闷.....
SQL77 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 freetd 的回复:]
那这样说只能是拆开来一条条地执行拉,哎!这样的话好麻烦
[/Quote]
就这里的话不麻烦呀!!!
freetd 2009-09-07
  • 打赏
  • 举报
回复
那这样说只能是拆开来一条条地执行拉,哎!这样的话好麻烦
华夏小卒 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fcuandy 的回复:]
引用 14 楼 js_szy 的回复:
引用 12 楼 freetd 的回复:
如果是两条select 就可以,象这样:
SQL codeexecute('select 123'+' select''sss''')declare@s1varchar(600),@s2varchar(600)set@s1='select 123'set@s2='select''sss'''execute(@s1+@s2)
但是有alter 的就是不行


因为,在执行insert时,alter还没有执行


我好像没给你这么说吧,
如果都执行insert了,怎么会alter没执行呢?
动态语句,运行过程中进行编译
alter ..
insert
在一个批中, 当编译进行对象检查时,因为alter 还未执行,此时insert语句通不过检查。这是出错的原因。
不用动态语句也是一样的道理


[/Quote]

理解错了。。。
fcuandy 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 js_szy 的回复:]
引用 12 楼 freetd 的回复:
如果是两条select 就可以,象这样:
SQL codeexecute('select 123'+' select''sss''')declare@s1varchar(600),@s2varchar(600)set@s1='select 123'set@s2='select''sss'''execute(@s1+@s2)
但是有alter 的就是不行


因为,在执行insert时,alter还没有执行
[/Quote]

我好像没给你这么说吧,
如果都执行insert了,怎么会alter没执行呢?
动态语句,运行过程中进行编译
alter ..
insert
在一个批中, 当编译进行对象检查时,因为alter 还未执行,此时insert语句通不过检查。这是出错的原因。
不用动态语句也是一样的道理

SQL77 2009-09-07
  • 打赏
  • 举报
回复
写两次也没关系呀
SQL77 2009-09-07
  • 打赏
  • 举报
回复

DECLARE @STR NVARCHAR(4000)
SET @STR='SELECT * FROM SYSOBJECTS'
DECLARE @STR1 NVARCHAR(4000)
SET @STR1='SELECT * FROM SYSOBJECTS'
DECLARE @STR2 NVARCHAR(4000)
SET @STR2=@STR+';'+@STR1
PRINT @STR2
EXEC(@STR2)
华夏小卒 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 freetd 的回复:]
如果是两条select 就可以,象这样:
SQL codeexecute('select 123'+' select''sss''')declare@s1varchar(600),@s2varchar(600)set@s1='select 123'set@s2='select''sss'''execute(@s1+@s2)
但是有alter 的就是不行
[/Quote]

因为,在执行insert时,alter还没有执行
华夏小卒 2009-09-07
  • 打赏
  • 举报
回复
我请教了一下高手,好像这种方式行不同

或者exec里再嵌套2个exec,这样,还不如分开写
freetd 2009-09-07
  • 打赏
  • 举报
回复
如果是两条select 就可以,象这样:

execute('select 123' + ' select ''sss''')
declare @s1 varchar(600),@s2 varchar(600)
set @s1 = 'select 123'
set @s2 = 'select ''sss'''
execute(@s1 + @s2)

但是有alter 的就是不行
freetd 2009-09-07
  • 打赏
  • 举报
回复
sql2000,sql2005我装了这两个版本的,都试过,还是不行
华夏小卒 2009-09-07
  • 打赏
  • 举报
回复
乔峰的,我也试了,好像也不行
fenlin 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 js_szy 的回复:]
SQL codedeclare@str1varchar(8000),@str2varchar(8000)set@str1='alter table [tablename] add .......'set@str2='insert into [tablename] (.....) select .... from [TableSource]'exec(@str1+';'+@str2)--好像可以这样¡­
[/Quote]

楼主的SQL什么版本啊?华夏小卒的方法可以的啊!
soft_wsx 2009-09-07
  • 打赏
  • 举报
回复
declare @str1 varchar(8000),@str2 varchar(8000)
set @str1 = 'alter table [tablename] add .......; go'
set @str2 = 'insert into [tablename] (.....) select .... from [TableSource] '
exec(@str1+@str2)
freetd 2009-09-07
  • 打赏
  • 举报
回复
好郁闷,难道真的拆分来一条条地执行
freetd 2009-09-07
  • 打赏
  • 举报
回复
5楼的跟2楼的没区别,但是我执行后的结果是:第一条语句没有执行,但是跳到第二条语句,出现的错误提示是:列名[...]无效
devilidea 2009-09-07
  • 打赏
  • 举报
回复
declare @str1 varchar(8000),@str2 varchar(8000)
set @str1 = 'alter table [tablename] add .......;'
set @str2 = 'insert into [tablename] (.....) select .... from [TableSource] '
exec(@str1+@str2)

这样可以的 分号放在第一条语句后面
freetd 2009-09-07
  • 打赏
  • 举报
回复
补充一句,这些操作都在存储过程中执行的
freetd 2009-09-07
  • 打赏
  • 举报
回复
我这里有一个方法,该方法返回的有可能是一条或多条SQL字符串语句(都存储在一个变量内),为求方便(不想再把这些语句拆成一条一条的来执行),要一次性把这些字符串语句执行完,所以想问有没有好的建议或方法是可以实现我的要求的
freetd 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 js_szy 的回复:]
SQL codedeclare@str1varchar(8000),@str2varchar(8000)set@str1='alter table [tablename] add .......'set@str2='insert into [tablename] (.....) select .... from [TableSource]'exec(@str1+';'+@str2)--好像可以这样¡­
[/Quote]
这样是不行的,会报 ';' 附近有语法错误。
加载更多回复(1)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧