WEB开发网
开发学院数据库MSSQL Server SQL Server 2008 表值类型参数 阅读

SQL Server 2008 表值类型参数

 2008-09-28 10:07:00 来源:WEB开发网   
核心提示: 注意: 插入的行在客户端的临时表中产生,查看并选中 下列代码并点击Execute:USE SQL2008DemoGOexec dbo.NewEmployeeTempTable查看并选中 下列代码并点击Execute:USE SQL2008DemoGOSELECT * FROM dbo.Em

注意: 插入的行在客户端的临时表中产生。

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

USE SQL2008Demo
GO
exec dbo.NewEmployeeTempTable

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

USE SQL2008Demo
GO
SELECT * FROM dbo.Employee
GO

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

USE SQL2008Demo
GO
Drop table dbo.#EmployeeTempTable
GO

注意:

1.临时表是在磁盘上创建并操作的,这将会导致大量的I/O操作。

2.它们在tempdb数据库中进行创建,并非常会导致锁定与阻碍问题。

3.在使用完成后,您必需手动清理数据,并删除临时表。

4.临时表的使用将会导致频繁的存储过程的重新编译。

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

查看并选中 下列代码并点击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 并不要保存更改。

上一页  1 2 3 4 

Tags:SQL Server 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接