SQL存储过程直接传表

将数据表传递给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 }

 

posted @ 2020-04-01 20:50  未风  阅读(896)  评论(0编辑  收藏  举报