技术开发 频道

SQL Server 2008 表值类型参数

使用表值类型参数插入数据

查看并选中 下列代码并点击Execute:

USE SQL2008DEMO
GO
Truncate table dbo.Employee

查看并选中 下列代码并点击Execute:

USE SQL2008DEMO
GO
CREATE TYPE EmployeeTableType AS TABLE
(EmpID
INT, EmpName nvarchar(100), EmpEmail nvarchar(100))

注意: 在这里需要创建一个表类型来处理表值类型参数。
查看并选中 下列代码并点击Execute:

USE SQL2008DEMO
GO
CREATE PROCEDURE NewEmployee(@EmployeeDetails EmployeeTableType READONLY)
As
BEGIN
  
INSERT INTO dbo.Employee
  
SELECT * FROM @EmployeeDetails
END

注意: 表值类型参数必须作为输入类型的只读(READONLY)参数传递到过程当中。在过程体当中,您不能在表值类型参数上执行DML操作,如UPDATE, DELETE, 或INSERT操作。
查看并选中 下列代码并点击Execute:

USE SQL2008Demo
GO
DECLARE @NewEmployees EmployeeTableType

INSERT INTO @NewEmployees
VALUES(1,'John McLean','JohnMcLean@contoso.com')
INSERT INTO @NewEmployees
VALUES(2,'Bob Smith','BobSmith@contoso.com')
INSERT INTO @NewEmployees
VALUES(3,'Ted Connery','TedConnery@contoso.com')

EXECUTE NewEmployee @NewEmployees
Go

注意: 在过程操作完成后,表值类型参数将不会再存在。
查看并选中 下列代码并点击Execute:

USE SQL2008Demo
GO
select * from dbo.Employee

注意: 使用表值类型参数的优势
表值类型参数提供了更好的灵活性,并且在许多情况下,可以提供比临时表或其它传递列表类型类型的方式更好的性能。表值类型参数提供了下列一些优势:
拥有一个良好定义的范围,在这个执行范围结束后,它将会自动清除。
不需要在客户端锁定正在处理的数据。
不会导致语句的重新编译。
提供了一个非常简单的编程模型。
可以让您在一个单一的过程当中引入复杂的业务逻辑。
减少与服务器的返回行程。
可以拥有不同粒度的表结构。
是一个强类型的类型定义。
允许客户端指定排序顺序和唯一键。
关闭所有应用程序并不要保存所有更改。
关闭Virtual PC 并不要保存更改。
 

0
相关文章