日期:2014-05-19  浏览次数:20577 次

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


------解决方案--------------------
@e 这个变量没有定义
------解决方案--------------------
try

declare @sql varchar(2000)
set @sql= 'create procedure ... '
set @sql=@sql+ 'as begin 定义 @e select @e=@@error '
set @sql=@sql+ 'if @e=0 ... '
exec ( ' '+@sql+ ' ')
------解决方案--------------------
把@sql打印出来看一下
------解决方案--------------------
不很明白你上面说的意思:
否考虑在这里的存储过程就被执行掉了,而不是把它作为文字放在
需要的后面的那个存储过程中,这个怎么处理

可以先判断删除:
if exists(select count(*) from sysobjects where name= 'procedure_name ' and type= 'p ')
drop procedure procedure_name

可能答所非问
------解决方案--------------------
这样测试没有问题啊
create proc #test
as

declare @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

#test

drop proc #test
drop proc #test2