SQL存储过程直接传表

Posted 未风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于SQL存储过程直接传表的主要内容,如果未能解决你的问题,请参考以下文章

.NET Entity Framework(EF)使用SqlQuery直接操作SQL查询语句或者执行过程

Java调用SQL Server的存储过程详解(转)

项目开发中使用存储过程和直接使用SQL语句的区别

oracle的存储过程的作用

oracle的存储过程

sql 这些代码片段将演示如何逐步使用PolyBase。你应该有一个blob存储和存储秘密方便