SQL Server 2008:表值参数的创建和使用
http://tech.ddvip.com 2008年05月27日 社区交流
内容摘要:表值参数(Table-valued parameter)是SQL Server2008的一个新特性,在以前的版本中,没有办法把表变量当作一个参数传递给存储过程。微软在SQL Server2008中引入了表值参数的特性,可以实现这项功能。
useTestDB
go
select*fromTestLocationTable
go
查询结果如下所示:
Id,shortname,name
1,NA1,NewYork
2,NA2,NewYork
3,NA3,NewYork
4,EU1,London
5,EU2,London
6,AS1,Tokyo
7,AS2,HongKong
12,ME1,Dubai
13,ME2,Tehran
17,EA1,Bombay
18,EA2,Karachi
(11row(s)affected)
从返回的结果,我们可以看到存储过程usp_InsertProdLocation 插入了表变量@TV中和表TestLocationTable所有不匹配的行。
我们还可以将表变量传递给一个函数。下面我们创建一个简单的函数,语句如下:
USE[TestDB]
GO
IFEXISTS(SELECT*FROMsys.objects
WHEREobject_id=OBJECT_ID(N'[dbo].[myfunction]')ANDtypein(N'FN',N'IF',N'TF',N'FS',N'FT'))
DROPFUNCTION[dbo].[myfunction]
GO
createfunctiondbo.myfunction(@TVOfficeLocation_TabetypeREADONLY)
returnsint
as
begin
declare@iint
set@i=(SelectCOUNT(*)from@TV)
return@i
end
现在,我们通过创建一个表变量并将该变量作为一个参数传递给已创建的函数以调用该函数,语句如下:
USE[TestDB]
GO
DECLARE@TVAS[OfficeLocation_Tabetype]
INSERTINTO@TV(Id,Shortname,Name)SELECT12,'ME1','Dubai'
INSERTINTO@TV(Id,Shortname,Name)SELECT13,'ME2','Tehran'
INSERTINTO@TV(Id,Shortname,Name)SELECT17,'EA1','Bombay'
INSERTINTO@TV(Id,Shortname,Name)SELECT18,'EA2','Karachi'
INSERTINTO@TV(Id,Shortname,Name)SELECT3,'NA3','NewYork'
INSERTINTO@TV(Id,Shortname,Name)SELECT4,'EU1','London'
selectdbo.myfunction(@TV)
go
执行结果如下:
(1row(s)affected)
(1row(s)affected)
(1row(s)affected)
(1row(s)affected)
(1row(s)affected)
(1row(s)affected)
-----------
6
注:上面所演示的脚本都是在SQL Server 2008 CTP6版本上进行编写并经过测试的。
来源:IT专家网 作者:cyw 责编:豆豆技术应用
- SQL Server 2008 教程
- SQL Server 2005 教程
- SQL Server 安全设置
- SQL Server 故障解决
- SQL Server 安装配置
- SQL Server 备份恢复
- SQL Server 性能调优
- SQL Server 存储过程
- SQL Server 函数
- SQL Server 事务
- SQL Server 查询
- SQL Server 索引
- SQL Server 入门教程
- SQL Server 数据类型
- SQL Server 数据库表
- SQL Server T-SQL
- SQL Server 语句
- SQL Server 死锁
- SQL Server 加密
- SQL Server 数据库连接
- SQL Server 数据仓库
- SQL Server 数据库管理
- 更多SQL Server 专题>>>