/*创建表*/
CREATE TABLE a
([id] int IDENTITY(1,1) PRIMARY KEY ,
[Name] varchar(50)
)
CREATE TABLE B
(
[id] int IDENTITY(1,1) PRIMARY KEY,
[Type] varchar(50),
[aid] int
Foreign key ([aid]) references a(ID)
)
--创建存储过程
CREATE PROCEDURE [dbo].[ADD]
(@strName varchar(50), @strType varchar(50))
as
DECLARE @aid int
begin tran
begin try
INSERT INTO A ([name]) VALUES (@strName)
--DECLARE @aid int=SELECT IDENT_SEED('A')
INSERT INTO B ([type],[aid]) VALUES(@strType,@@identity)
end try
begin catch
if @@trancount > 0
rollback tran
end catch
if @@trancount > 0
commit tran
--执行存储过程
EXEC [ADD] 'fff','fff'
--查询结果
SELECT * FROM A
SELECT * FROM b
--1. 在事务语句最前面加上set xact_abort on
set xact_abort on
begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
commit tran
go
--2. 在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。
begin tran
update statement 1 ...
if @@error <> 0 begin
rollback tran
goto labend
end
delete statement 2 ...
if @@error <> 0 begin
rollback tran
goto labend
end
commit tran
labend:
go
--3. 在SQL Server 2005中,可利用 try...catch 异常处理机制
begin tran
begin try
update statement 1 ...
delete statement 2 ...
end try
begin catch
if @@trancount > 0
rollback tran
end catch
if @@trancount > 0
commit tran
go
set xact_abort on --开启默认系统事物 非自定义错误回滚
begin tran
-----------------------------------
declare @tbname nvarchar(100)
declare @create nvarchar(500)
declare cur1 cursor for
select name from sysobjects where xtype='U' AND ( charindex('louxiqu',name)>0 OR charindex('louxinqu',name)>0 )
OPEN cur1
fetch cur1 into @tbname
while @@FETCH_STATUS = 0
BEGIN
--------------------------
if object_id('MCJZYFDATA.dbo.'+@tbname) is not null
BEGIN
if object_id('Bak_MCJZYFDATA.dbo.'+@tbname) is not null
BEGIN
EXEC(' DROP TABLE Bak_MCJZYFDATA.dbo.'+@tbname+'' );
END
SET @create=' SELECT * INTO Bak_MCJZYFDATA.dbo.'+@tbname+' from MCJZYFDATA.dbo.'+@tbname
EXEC(@create);
EXEC(' DROP TABLE MCJZYFDATA.dbo.'+@tbname+'' );
--print @create
END
--------------------------
fetch cur1 INTO @tbname
end
close cur1
deallocate cur1
-----------------------------------
commit tran
go
-------------------
ALTER Proc [dbo].[BakTable](
@tbname Nvarchar(500)
)
as
Declare @sql Nvarchar(2000)
Declare @baktbname Nvarchar(500)
SET @baktbname=@tbname+replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
SET @sql=' SELECT * INTO Bak_MCJZYFDATA.dbo.'+@baktbname+' from MCJZYFDATA.dbo.'+@tbname
exec(@sql)
--exec BakTable 'Config' 备份表存储过程