登录
注册
程序人生
个人空间
个人相册
帮助
界面
简洁版本
拼吾爱程序人生
数据库编程
SQL Server
SQL Server 2008数据库中如何使用表值参数
Web
www.pin5i.com
输入您的搜索字词
提交搜索表单
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
WF
其他编程
Java
Ajax
javascript
正则表达式
XML
Web Service
C & C++
Ruby & Python
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
1
/ 1 页
1
跳转
页
查看:
230
SQL Server 2008数据库中如何使用表值参数
cobra
striver
个人空间
相册
性别:
来自:
拼吾爱
积分:
7097
帖子:
7009
注册:
2007-04-09
2008-09-29 23:26
|
只看楼主
树型
|
收藏
|
小
中
大
复制帖子链接到剪贴板
1F
SQL Server 2008数据库中如何使用表值参数
摘要:在SQL Server 2005或更早的版本中的数据库中,表变量是不能作为存储过程的参数的。SQL Server 2008中的T-SQL功能新增了表值参数。利用这个新增特性,我们可以很方便的将一个表作为参数传给存储过程,减少了应用程序与SQL Server数据库服务器之间的交互,提升了程序性能。
在SQL Server 2005或更早的版本中的数据库中,表变量是不能作为存储过程的参数的。当多行数据到SQL Server需要发送多行数据到SQL Server ,开发者要么每次发送一列记录,或想出其他的变通方法,以满足需求。虽然在.net 2.0中提供了个SQLBulkCopy对象能够将多个数据行一次性传送给SQL Server,但是多行数据仍然无法一次性传给存储过程。
SQL Server 2008中的T-SQL功能新增了表值参数。利用这个新增特性,我们可以很方便地通过T-SQL语句,或者通过一个应用程序,将一个表作为参数传给存储过程。
1、用户自定义表类型
当第一次看看新的表值参数,我认为使用此功能有点复杂。有几个步骤。要做的第一件事是定义表型。在Management Studio 2008中的“Programmability”“Type”节点,您可以看到“User-Defined Table Types(用户自定义表类型)”,如图1所示 。
附件:
您所在的用户组无法下载或查看附件
图 1:用户自定义表类型
点击右键,在弹出菜单中选择“新用户定义的表型... ” ,会新建一个模板中的查询窗口,如图2所示 。
附件:
您所在的用户组无法下载或查看附件
图2:用户自定义表类型创建语句
点击“Specify Values for Template Parameters(指定值为模板参数)”按钮,将探出一个对话框,如图3所示。
附件:
您所在的用户组无法下载或查看附件
图 3:指定模板参数列的数值
在填写在适当的数值之后,点击确定按钮,一个“CREATE TYPE”的声明取代了范本。这时,你也可以手动增加一些列,或者增加一些限制条件,最后点击确定按钮。
以下是最终的代码:
Code
[copy to clipboard]
CODE:
-- ================================
-- Create User-defined Table Type
-- ================================
USE Test
GO
-- Create the data type
CREATE TYPE dbo.MyType AS TABLE
(
col1 int NOT NULL,
col2 varchar(20) NULL,
col3 datetime NULL,
PRIMARY KEY (col1)
)
GO
在运行代码之后,对象的定义就建立好了,你可以在“User-Defined Table Type(用户自定义表类型”中查看属性,如图4所示,但没法修改它们。如果要修改的类型,你只能将其删除,然后按照修改后的属性再次创建它。
附件:
您所在的用户组无法下载或查看附件
图4:查看用户自定义表类型的属性
2、使用用户自定义的表类型
如果打算在T-SQL代码中使用,您还必须创建一个新类型的变量,然后将具体的表的名称赋值给该变量。一旦赋值后,您可以在其他的T-SQL语句中使用它。因为它是一个变量,在批处理完成后,它也自动失效,结束生命周期。
请注意下面的代码,MyType是我们之前刚刚创建的数据类型。
Code
[copy to clipboard]
CODE:
DECLARE @MyTable MyType
INSERT INTO @MyTable(col1,col2,col3)
VALUES (1,'abc','1/1/2000'),
(2,'def','1/1/2001'),
(3,'ghi','1/1/2002'),
(4,'jkl','1/1/2003'),
(5,'mno','1/1/2004')
SELECT * FROM @MyTable
在变量的有效范围内,你可以象操作正常的表一样来操作这个变量,如与另一个表象关联或者将变量中的记录填充到另一个表。对于表变量来说,你无法修改表定义。
正如前面提到的,变量不能超出它的有效的范围。如果T-SQL脚本由多个批处理组成,变量只有在批处理内才能创建并有效使用。
(文/林善茂 出处/赛迪网)
感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
您可能对 [SQL Server] 的这些文章也感兴趣:
ASP连接SQL Server2000数据库例程
SQL Server 2000非域环境下数据库异机备份
Oracle数据库与SQL Server数据库中的临时表
在SQL Server 2005中如何列出所有存储过程
道与魔:SqlServer存储过程/函数加/解密
Sql Server2005 Transact-SQL 学习总结之-窗口函数(OVER)
sql server 2008 offer 4 kinds of date datatypes
解读SQL Server 2008的新语句MERGE
SQL Server日志文件丢失的恢复方法
Microsoft SQL Server 2000安装问题集锦
发送短消息
查看公共资料
查找该会员全部帖子
UID:
1
精华:
10
威望:
38
金钱:
1491.55 拼元
状态:
离线
28688028
<<
上一主题
|
下一主题
>>
1
/ 1 页
1
跳转
页
快速回复帖子
标题
禁用 URL 识别
禁用表情
禁用 Discuz!NT 代码
使用个人签名
default
正在加载表情...
[完成后可按 Ctrl+Enter 无刷新发布]
论坛跳转...
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
WF
其他编程
Java
Eclipse
Spring
EJB
Ajax
ExtJS
Dojo
javascript
jQuery
正则表达式
XML
Web Service
C & C++
Ruby & Python
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
管理团队
回收站
下载权限不够?五招教你快速提升权限。。。
我的主题
我的帖子
我的精华
我的空间
我的相册
帖子标题
空间日志
相册标题
作 者
我的主题
我的帖子
我的附件
我的精华
我的空间
我的相册