我在一个存储过程自动生成另一个对表的Insert的存储过程中,其它都对
但是在拼接SQL语句时做了如下
sql='create procedure ...'
sql=sql+'select @e=@@error '
sql=sql+'if @e=0....'
exec sql
这样的语句生成到最后,这个select语句在最终生成的存储过程中没有出现,是怎么回事,该怎么用法,求救

解决方案 »

  1.   

    trydeclare @sql varchar(2000)
    set @sql='create procedure ... '
    set @sql=@sql+'as begin 定义 @e select @e=@@error '
    set @sql=@sql+'if @e=0 ...'
    exec (''+@sql+'')
      

  2.   

    @e定义过的
    declare @e int
    在最前面定义过,是否考虑在这里的存储过程就被执行掉了,而不是把它作为文字放在
    需要的后面的那个存储过程中,这个怎么处理
      

  3.   

    不很明白你上面说的意思:
      否考虑在这里的存储过程就被执行掉了,而不是把它作为文字放在
    需要的后面的那个存储过程中,这个怎么处理可以先判断删除:
    if exists(select count(*) from sysobjects where name='procedure_name' and type='p')
    drop procedure procedure_name可能答所非问
      

  4.   

    就是说我是由第一个存储过程,产生第二个过程
    这个select语句我是想要做为文字原封不动地放在第二个过程中的。
    现在第二个过程中没有,考虑就是第一个过程中exec 后把它做为语句执行了,而不是做为文字
    原封不动地放到第二个过程中
      

  5.   

    这样测试没有问题啊
    create proc #test
    asdeclare @sql nvarchar(4000)select @sql = ''select @sql = @sql + '
    create proc #test2 as 
    declare @e int
    select 1
    select @e = @@error
    select @e'
    exec sp_executesql @sql
    select @sql = 'exec #test2'
    exec sp_executesql @sql#testdrop proc #test 
    drop proc #test2
      

  6.   

    把拼接SQL语句print出来,然后再查询分析器中执行,看看是否正常;最终生成的存储过程中没有出现,是否报错呢?还是因为条件判断没有执行呢?