欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【SQL Server 2008数据库中使用表值参数】,下面是详细的分享!
SQL Server 2008数据库中使用表值参数
在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所示 。

在填写在适当的数值之后,点击确定按钮,一个“CREATE TYPE”的声明取代了范本。这时,你也可以手动增加一些列,或者增加一些限制条件,最后点击确定按钮。
以下是最终的代码:
|
以下为引用的内容: --================================ |
在运行代码之后,对象的定义就建立好了,你可以在“User-Defined Table Type(用户自定义表类型”中查看属性,如图4所示,但没法修改它们。如果要修改的类型,你只能将其删除,然后按照修改后的属性再次创建它。

2、使用用户自定义的表类型
如果打算在T-SQL代码中使用,您还必须创建一个新类型的变量,然后将具体的表的名称赋值给该变量。一旦赋值后,您可以在其他的T-SQL语句中使用它。因为它是一个变量,在批处理完成后,它也自动失效,结束生命周期。
请注意下面的代码,MyType是我们之前刚刚创建的数据类型。
|
以下为引用的内容: DECLARE @MyTable MyType |
在变量的有效范围内,你可以象操作正常的表一样来操作这个变量,如与另一个表象关联或者将变量中的记录填充到另一个表。对于表变量来说,你无法修改表定义。
正如前面提到的,变量不能超出它的有效的范围。如果T-SQL脚本由多个批处理组成,变量只有在批处理内才能创建并有效使用。
3、使用变量作为参数
到目前为止,我们还没有看到经常表变量无法实现的功能。其好处是能够将变量作为参数传给存储过程。当然一个存储过程必须先建立,使用新的类型作为其中的一个参数。
下面这个例子,通过代码创建一个常规表,并对其填充记录。
|
以下为引用的内容: USE [Test] |
请注意表值参数后面带了个READONLY参数。这是必需的,不能在例程体中对表值参数执行诸如 UPDATE、DELETE 或 INSERT 这样的 DML 操作。
最后,我们对创建表值变量,对变量进行赋值,并调用存储过程。
|
以下为引用的内容: DECLARE @MyTable MyType |
为了让用户使用自定义表类型,执行或控制权限必须是理所当然的。以下是授权命令:
|
以下为引用的内容: GRANT EXECUTE ON TYPE::dbo.MyType TO TestUser; |
4、通过.net应用程序调用
表值参数这一特性最大的亮点在于可以在.net应用中使用表值参数。为了做到这一点,你必须要先安装.NET 3.5框架,并确保应用程序中已经引用了 System.Data.SqlClient命名空间。创建表值参数时需要用到一些新的SQL数据类型(如DataTable、DataColumn等)。
首先创建一个本地数据表,并插入一些记录。肯定的是, DataTable中创建符合用户定义的表型的列计数和数据类型。
|
以下为引用的内容: 'Create a local table |
我们在代码中采用存储过程:创建一个命令对象,并新增两个参数。代码如下图所示:
|
以下为引用的内容: 'Create a command object that calls the stored proc |
请注意@ MyTableParam参数的数据类型(SqlDbType.Structured),这是.Net 3.5中新增的功能。最后,将当地表赋值给表值参数,并执行该命令。
|
以下为引用的内容: 'Set the value of the parameter |
5、小结
SQL Server 2008中新增的表值参数特性,减少了应用程序与SQL Server数据库服务器之间的交互,提升了程序性能。
--------------------------------------------------------------
如果您有数据库资料、建议或是相关最新技术信息等等,请联系赛迪网IT技术--数据库频道,我们会在第一时间发布、分享给广大网友。
联系信箱:dongjw#staff.ccidnet.com (请将"#"改为"@")
以上所分享的是关于SQL Server 2008数据库中使用表值参数,下面是编辑为你推荐的有价值的用户互动:
相关问题:SQL server 2008的数据库所有表中搜索某个数字
答:我去,这不是抠抠那个数据库吗? 这东西不能在这答,你 我,屏幕右上角,我教你 >>详细
相关问题:使用SQL SERVER2008的VS做报表,多个参数,给参数...
答:select * from tbl where id in( 参数1,参数2,参数2) >>详细
相关问题:sql server2008怎么实现查询某个数据库中所有的表...
答:你是要写代码生成器么? --这是查表的数量 Select [name] from sysObjects Where xtype='U'and [name]'dtproperties' Order By [name] --得到数据库中所有用户视图 Select [name] From sysObjects Where xtype='V' And [name]'syssegments' And [... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
