我在c_中创建了一个数据表。

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));

dt.Rows.Add("James", 23);
dt.Rows.Add("Smith", 40);
dt.Rows.Add("Paul", 20);

我要将此传递给以下存储过程。
CREATE PROCEDURE  SomeName(@data DATATABLE)
AS
BEGIN
    INSERT INTO SOMETABLE(Column2,Column3)
    VALUES(......);
END

我的问题是:如何将这3个元组插入到sql表中?我们需要用点运算符访问列值吗?或者还有别的办法吗?

最佳答案

您可以更改存储过程以接受table valued parameter作为输入。但是,首先需要创建一个与c datatable的结构匹配的用户定义表类型:

CREATE TYPE dbo.PersonType AS TABLE
(
    Name NVARCHAR(50), -- match the length of SomeTable.Column1
    Age INT
);

调整存储过程:
CREATE PROCEDURE dbo.InsertPerson
    @Person dbo.PersonType READONLY
AS
BEGIN
  INSERT INTO SomeTable(Column1, Column2)
     SELECT p.Name, p.Age
     FROM @Person p;
END

在c中,将数据表绑定到proc参数时,需要将参数指定为:
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.PersonType";

另请参见此处的示例Passing a Table-Valued Parameter to a Stored Procedure

07-28 03:06
查看更多