34,838
社区成员




cmd.CommandText = "Insert into DoneEvent (Sbegintime,Sendtime,Scontent,Ssubject) select Ebegintime,Eendtime,Econtent,Esubject from Event where Eid= + Eid ;delete from Event where Eid=" + Eid;
ALTER proc [dbo].[sys_ExecNonQuery]
@sqls xml, --sql语句 xml样式 @data='<sqls>
--<sql>delete from ....</sql>
--<sql>insert ...</sql>
-- </sqls>'
@ResultVal int output --返回值,0 不成功 1成功
as
declare @sql varchar(max),@id uniqueidentifier,@i int
set @ResultVal=0
Create table #tmp_ExecNonQuery(
FID uniqueidentifier,
FVar varchar(max)
)
Insert into #tmp_ExecNonQuery(FID,FVar)
select NEWID(),
T.c.value('./text()[1]', 'nvarchar(max)')
from @sqls.nodes('//sql') as T(c)
select @i=COUNT(1) from #tmp_ExecNonQuery
begin try
begin tran;
--执行开始
WHILE exists(select * from #tmp_ExecNonQuery)
BEGIN
select @id=FID,@sql=FVar from #tmp_ExecNonQuery
exec (@sql)
delete from #tmp_ExecNonQuery where FID=@id
END
---执行结束
set @ResultVal=@i
commit tran
end try
begin catch -- 数据回滚
--将单据状态影响值数据回滚
--获取
--将单据状态影响值数据回滚
DECLARE @ErrorMessage NVARCHAR(4000),@ErrorSeverity INT,@ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
set @ResultVal=0
RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState )
rollback transaction
end catch