如何将数据表参数传递给存储过程sql server?

use*_*439 3 sql-server datatable stored-procedures

我需要将数据表传递给以下存储过程

 create procedure insert_data
(@a int ,
@b DataTable)
as 
Begin 
......
end
Run Code Online (Sandbox Code Playgroud)

我用C#

M.A*_*Ali 5

您需要做一些事情才能实现这一点,因为您想要将表作为参数传递,所以您需要创建 (1) 表类型和 (2) 让您的存储过程接受该类型的参数。

以下是创建 TABLE TYPE 所需的步骤。

表格类型

CREATE TYPE dbo.DataTable AS TABLE 
 (
    -- define table structure here
  )
 GO
Run Code Online (Sandbox Code Playgroud)

程序

现在让您的过程接受该表类型的参数。

create procedure insert_data
@a int ,
@b dbo.DataTable READONLY    --<-- Note this is read only param
as 
Begin 
......
end
Run Code Online (Sandbox Code Playgroud)

此传递的参数将是只读参数,因此如果您需要操作此参数中传递的值,您将需要在过程中的表变量或临时表中获取这些值,然后才能对它们执行任何更新或插入操作。

使用 C#

您可以使用 DataTable 类创建该类型的新实例,该实例与 sql server 中的表类型匹配。像这样的东西..

DataTable dt = new DataTable("DataTable"); 

// Add columns to this object same as the type in sql server

dt.Columns.Add("Column1", typeof(string)); 
dt.Columns.Add("Column2", typeof(Int32)); 

//Populate the dt object 

dt.Rows.Add("Value1", 1); 
dt.Rows.Add("Value2", 2); 
dt.Rows.Add("Value2", 3); 
Run Code Online (Sandbox Code Playgroud)