将数据表传递给SQL Server中的存储过程
创建一个表:
1 CREATE TABLE dbo.TestTableVariable 2 ( 3 ID INT IDENTITY(1,1) primary key, 4 Name VARCHAR(10), 5 Addr VARCHAR(10) 6 )
创建需要传的表:
1 CREATE TYPE dbo.TableVariable AS TABLE 2 ( 3 ID INT 4 )
插入一些默认数据:
1 INSERT INTO dbo.TestTableVariable VALUES (‘aaa‘, ‘addr-aaa‘) 2 INSERT INTO dbo.TestTableVariable VALUES (‘bbb‘, ‘addr-bbb‘) 3 INSERT INTO dbo.TestTableVariable VALUES (‘ccc‘, ‘addr-ccc‘) 4 INSERT INTO dbo.TestTableVariable VALUES (‘ddd‘, ‘addr-ddd‘)
创建具有表变量作为参数的存储过程:
1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 CREATE PROCEDURE dbo.SelectTestTableVariable 6 ( 7 @TableVar dbo.TableVariable READONLY 8 ) 9 AS 10 BEGIN 11 SET NOCOUNT ON; 12 13 SELECT ID, Name, Addr FROM dbo.TestTableVariable 14 WHERE ID IN (SELECT ID FROM @TableVar) 15 16 END 17 GO
这是控制台应用程序的C#代码:
1 static void Main(string[] args) 2 { 3 DataSet dataset = new DataSet(); 4 DataTable dataTable = new DataTable(); 5 dataTable.Columns.Add("ID"); 6 var dr = dataTable.NewRow(); 7 dr["ID"] = 1; 8 dataTable.Rows.Add(dr); 9 using (SqlConnection conn = new SqlConnection( 10 @"Data Source=.\SqlExpress;Initial Catalog=Work;Integrated Security=True;")) 11 { 12 conn.Open(); 13 using (SqlCommand cmd = new SqlCommand("[dbo].[SelectTestTableVariable]")) 14 { 15 cmd.CommandType = CommandType.StoredProcedure; 16 cmd.Connection = conn; 17 cmd.Parameters.AddWithValue("@TableVar", dataTable); 18 using (SqlDataAdapter adp = new SqlDataAdapter(cmd)) 19 { 20 adp.Fill(dataset); 21 } 22 } 23 } 24 }