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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM