赛迪网 > IT技术 数据库 > SQL Server
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

SQL Server 2008表值参数的创建和使用步骤 (1)

发布时间:2008.06.11 08:40     来源:赛迪网    作者:Alizze

【赛迪网-IT技术报道】表值参数(Table-valued parameter)是SQL Server数据库2008的新特性之一,在以往的版本中,我们没有办法把表变量当作一个参数传递给存储过程。但在微软的SQL Server 2008中引入了表值参数这个特性,它可以实现此类功能。

表值参数有两个明显的优点:

1:不需要为初始的数据加锁。

2:它不会导致语句重新编译。

表值参数的创建和使用包括以下步骤:

(1) 创建表类型

(2) 创建一个可将表类型作为参数来接受的存储过程或函数

(3) 创建表变量并插入数据

(4) 调用该存储过程和函数,并将表变量作为参数传递。

下面,我们来一步步分解这个创建和使用的过程。首先,我们用以下的DDL SQL语句来创建一个名为“TestDB”的测试数据库:

USE [master]
GO

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'TestDB')

DROP DATABASE TestDB
GO
Create database TestDB
go

下面,使用以下的DDL SQL语句来创建一个名为TestLocationTable的表:

USE [TestDB] 
GO 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].

[TestLocationTable]') AND type in (N'U')) 

DROP TABLE [dbo].[TestLocationTable] 
GO 
USE [TestDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[TestLocationTable]( 
[Id] [int] NULL, 
[shortname] [char](3) NULL, 
[name] [varchar](100) NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO

然后,使用以下的DML SQL语句将数据添加到我们上面创建的表中:

USE [TestDB] 
GO 
insert into TestLocationTable ( Id, shortname, Name) select 1, 'NA1', 'NewYork' 
insert into TestLocationTable ( Id, shortname, Name) select 2, 'NA2', 'NewYork' 
insert into TestLocationTable ( Id, shortname, Name) select 3, 'NA3', 'NewYork' 
insert into TestLocationTable ( Id, shortname, Name) select 4, 'EU1', 'London' 
insert into TestLocationTable ( Id, shortname, Name) select 5, 'EU2', 'London' 
insert into TestLocationTable ( Id, shortname, Name) select 6, 'AS1', 'Tokyo' 
insert into TestLocationTable ( Id, shortname, Name) select 7, 'AS2', 'HongKong' 
go

下面,我们需要创建一个和TestLocationTable表具有相似表结构的表类型(TABLE TYPE),语句如下所示:

USE [TestDB] 
GO 
IF EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id 
WHERE st.name = N'OfficeLocation_Tabetype' AND ss.name = N'dbo') 
DROP TYPE [dbo].[OfficeLocation_Tabetype] 
GO 
USE [TestDB] 
GO 
CREATE TYPE [dbo].[OfficeLocation_Tabetype] AS TABLE( 
[Id] [int] NULL, 
[shortname] [char](3) NULL, 
[name] [varchar](100) NULL 
) 
GO

1 2 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· SQL Server2008数据库引擎功能的重大更改 (06-04) · 详细介绍微软SQL Server 2008 (02-22)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 移动信息化市场方兴未艾 企业呼唤标准出台
· 如何把握企业价值差异 避免CRM与SCM脱节
· 齐看四大厂商的SaaS动态 ERP案例分析
· 通方期货CRM解决方案 方正电子公文系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统