如题所述,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,那么要怎么写才正确

解决方案 »

  1.   


    declare @str1 varchar(8000),@str2 varchar(8000)
        set @str1 = 'alter table [tablename] add .......'
        set @str2 = 'insert into [tablename] (.....) select .... from [TableSource] '
        exec(@str1+';'+@str2) 
     --好像可以这样,或者在这里加 set @str1='.....;'  不知道行不行
      

  2.   

    我这里有一个方法,该方法返回的有可能是一条或多条SQL字符串语句(都存储在一个变量内),为求方便(不想再把这些语句拆成一条一条的来执行),要一次性把这些字符串语句执行完,所以想问有没有好的建议或方法是可以实现我的要求的
      

  3.   

    declare @str1 varchar(8000),@str2 varchar(8000)
        set @str1 = 'alter table [tablename] add .......;'
        set @str2 = 'insert into [tablename] (.....) select .... from [TableSource] '
    exec(@str1+@str2)这样可以的 分号放在第一条语句后面
      

  4.   

    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)
      

  5.   


    楼主的SQL什么版本啊?华夏小卒的方法可以的啊!
      

  6.   

    sql2000,sql2005我装了这两个版本的,都试过,还是不行
      

  7.   

    如果是两条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 的就是不行
      

  8.   

    我请教了一下高手,好像这种方式行不同或者exec里再嵌套2个exec,这样,还不如分开写
      

  9.   


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

  10.   


    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)
      

  11.   


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

  12.   

    怎么不麻烦,首先获得的SQL命令不知道有多少条,又要在每条语句间弄一个标式符,再写一个存储过程通过标式符把这些语句一条条截取出来单独去运行,这些工作说少不少说多不多.....如果是在代码中实现那就好了(起码调试的时候都好多了),但所有过程都要在存储过程中实现。郁闷.....