34,591
社区成员
发帖
与我相关
我的任务
分享
use tempdb
GO
Set nocount On
if object_id('Department') Is Not Null Drop Table Department
if object_id('Employee') Is Not Null Drop Table Employee
Create Table Department(DeptID int primary key,DeptName nvarchar(50))
Create Table Employee(EmployeeID int primary key ,FirstName nvarchar(50),LastName nvarchar(50),DepartmentID int,Scores int)
go
Insert into Department(DeptID,DeptName) values(1,'Office'),(2,'HR'),(3,'IT'),(4,'Sales'),(5,'Other')
go
--存储过程
if object_id('InsertRecords') Is Not Null
Drop proc InsertRecords
Go
--存储过程
Create proc InsertRecords
As
Begin Try
begin tran
If not Exists(Select 1 From Department Where DeptID In(2,4,5) having Count(1)=3)
raiserror 50001 '存在无效的DepartmentID'
Insert Into Employee(EmployeeID,FirstName,LastName,DepartmentID,Scores)
values (15,N'first15',N'last15',2,80),
(16,N'first16',N'last16',4,92),
(17,N'first17',N'last17',5,75)
Commit tran
End Try
Begin Catch
Declare @ErrorMessage nvarchar(2047)
Set @ErrorMessage=Error_message()
Raiserror 50001 @ErrorMessage
rollback tran
End Catch
Go
--存储过程调用
Exec InsertRecords
Go
Select * From Employee
use tempdb
GO
Set nocount On
if object_id('Department') Is Not Null Drop Table Department
if object_id('Employee') Is Not Null Drop Table Employee
Create Table Department(DeptID int primary key,DeptName nvarchar(50))
Create Table Employee(EmployeeID int primary key ,FirstName nvarchar(50),LastName nvarchar(50),DepartmentID int,Scores int)
go
Insert into Department(DeptID,DeptName) values(1,'Office'),(2,'HR'),(3,'IT'),(4,'Sales'),(5,'Other')
go
go
--存储过程
if object_id('InsertRecords') Is Not Null
Drop proc InsertRecords
Go
--创建表类型
if Exists(Select 1 From sys.types Where name='Employee')
Drop type Employee
Create type Employee As Table(
EmployeeID int,
FirstName nvarchar(50),
LastName nvarchar(50),
DepartmentID int,
Scores int
)
Go
--存储过程
Create proc InsertRecords
(
@Employee Employee Readonly
)
As
If Exists(Select 1 From @Employee As a Where Not Exists(Select 1 From Department Where DeptID=a.DepartmentID))
begin
Raiserror 50001 N'发现无效的DepartmentID'
End
Else
Insert Into Employee(EmployeeID,FirstName,LastName,DepartmentID,Scores)
Select EmployeeID,FirstName,LastName,DepartmentID,Scores From @Employee
go
--存储过程调用
Declare @Employee As Employee
Insert into @Employee(EmployeeID,FirstName,LastName,DepartmentID,Scores)
values (15,N'first15',N'last15',2,80),
(16,N'first16',N'last16',4,92),
(17,N'first17',N'last17',5,75)
Exec dbo.InsertRecords @Employee = @Employee
Go
Select * From Employee
create proc procname
as
begin
insert into employee values(...)
insert into employee values(...)
insert into employee values(...)
end
--事务不会
use tempdb
GO
Set nocount On
if object_id('Department') Is Not Null
Drop Table Department
if object_id('Employee') Is Not Null
Drop Table Employee
Create Table Department(DeptID int primary key,DeptName nvarchar(50))
Create Table Employee(EmployeeID int primary key ,FirstName nvarchar(50),LastName nvarchar(50),DepartmentID int,Scores int)
go
Insert Into Department(DeptID,DeptName) values(1,'Office')
Insert Into Department(DeptID,DeptName) values(2,'HR')
Insert Into Department(DeptID,DeptName) values(3,'IT')
Insert Into Department(DeptID,DeptName) values(4,'Sales')
Insert Into Department(DeptID,DeptName) values(5,'Other')
go
--存儲過程
if object_id('InsertRecords') Is Not Null
Drop proc InsertRecords
Go
Create proc InsertRecords
(
@EmployeeID int,
@FirstName nvarchar(50),
@LastName nvarchar(50),
@DepartmentID int,
@Scores int
)
As
If Exists(Select 1 From Department Where DeptID=@DepartmentID)
Insert Into Employee(EmployeeID,FirstName,LastName,DepartmentID,Scores) values(@EmployeeID,@FirstName,@LastName,@DepartmentID,@Scores)
GO
--存儲過程調用
begin tran
Exec InsertRecords @EmployeeID=15,@FirstName='first15',@LastName='last15',@DepartmentID=2,@Scores=80
If @@ROWCOUNT =0 Goto ErrFlag
Exec InsertRecords @EmployeeID=16,@FirstName='first16',@LastName='last16',@DepartmentID=4,@Scores=92
If @@ROWCOUNT =0 Goto ErrFlag
Exec InsertRecords @EmployeeID=17,@FirstName='first17',@LastName='last17',@DepartmentID=5,@Scores=75
If @@ROWCOUNT =0 Goto ErrFlag
Commit Tran
Print N'Commit Tran'
Goto ExitFlag
ErrFlag:
Rollback Tran
Print N'Rollback Tran'
ExitFlag:
Go