SQL Server 2008数据库中如何使用表值参数(二)

日期: 2008-09-25 作者:林善茂 来源:TechTarget中国 英文

  3、使用变量作为参数


  到目前为止,我们还没有看到经常表变量无法实现的功能。其好处是能够将变量作为参数传给存储过程。当然一个存储过程必须先建立,使用新的类型作为其中的一个参数。


  下面这个例子,通过代码创建一个常规表,并对其填充记录。







USE [Test]
GO
create TABLE [dbo].[MyTable] (
 [col1] [int] NOT NULL PRIMARY KEY,
 [col2] [varchar](20) NULL,
 [col3] [datetime] NULL,
 [UserID] [varchar] (20) NOT NULL
 ) 
GO
create PROC usp_AddRowsToMyTable @MyTableParam MyType READONLY,
 @UserID varchar(20) AS
 
 insert INTO MyTable([col1],[col2],[col3],[UserID])
 select [col1],[col2],[col3],@UserID 
 FROM @MyTableParam
 
GO 


  请注意表值参数后面带了个READONLY参数。这是必需的,不能在例程体中对表值参数执行诸如 update、delete 或 insert 这样的 DML 操作。


  最后,我们对创建表值变量,对变量进行赋值,并调用存储过程。







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’)
&#101xec usp_AddRowsToMyTable @MyTableParam = @MyTable, @UserID = ’Kathi’
select * FROM MyTable 


  为了让用户使用自定义表类型,执行或控制权限必须是理所当然的。以下是授权命令:







GRANT &#101xecute ON TYPE::dbo.MyType TO TestUser; 


  4、通过.net应用程序调用


  表值参数这一特性最大的亮点在于可以在.net应用中使用表值参数。为了做到这一点,你必须要先安装.NET 3.5框架,并确保应用程序中已经引用了 System.Data.SqlClient命名空间。创建表值参数时需要用到一些新的SQL数据类型(如DataTable、DataColumn等)。


  首先创建一个本地数据表,并插入一些记录。肯定的是, DataTable中创建符合用户定义的表型的列计数和数据类型。







’create a local table
Dim table As New DataTable(“temp”)
Dim col1 As New DataColumn(“col1”, System.Type.GetType(“System.Int32”))
Dim col2 As New DataColumn(“col2”, System.Type.GetType(“System.String”))
Dim col3 As New DataColumn(“col3”, System.Type.GetType(“System.DateTime”))
table.Columns.Add(col1)
table.Columns.Add(col2)
table.Columns.Add(col3)
        
’Populate the table
For i As Integer = 20 To 30
    Dim vals(2) As Object
    vals(0) = i
    vals(1) = chr(i + 90)
    vals(2) = System.DateTime.Now
    table.Rows.Add(vals)
Next 


  我们在代码中采用存储过程:创建一个命令对象,并新增两个参数。代码如下图所示:







’create a command object that calls the stored proc
Dim command As New SqlCommand(“usp_AddRowsToMyTable”, conn)
command.CommandType = CommandType.StoredProcedure
’create a parameter using the new type
Dim param As SqlParameter = command.Parameters.Add
(“@MyTableParam”, SqlDbType.Structured)
command.Parameters.AddWithValue(“@UserID”, “Kathi”) 


  请注意@ MyTableParam参数的数据类型(SqlDbType.Structured),这是.Net 3.5中新增的功能。最后,将当地表赋值给表值参数,并执行该命令。






’Set the value of the parameter
param.Value = table
’&#101xecute the query
command.&#101xecuteNonQuery() 
  5、小结


  SQL Server 2008中新增的表值参数特性,减少了应用程序与SQL Server数据库服务器之间的交互,提升了程序性能。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐