将c#DataTable作为参数传递给MS SQL Server 2008中的存储过程

Sau*_*kar 3 sql sql-server datatable cursor sql-server-2008

我想将DataDable传递给存储过程作为参数 cointaning下面的列:

Supp_Id          int
Del_Methode_Id   int
Ord_Ammount      int
Promo_Id         int
Discount_Ammount Money
Run Code Online (Sandbox Code Playgroud)

现在我想在存储过程中使用这个数据表,并希望在其上声明一个游标.并使用该游标按顺序将值插入数据库表.

请告诉我如何在存储过程中声明datatable参数,然后在该参数上使用cursor

Aar*_*and 10

首先,您需要创建一个类型:

CREATE TYPE dbo.whatever AS TABLE
(
  Supp_Id          int, 
  Del_Methode_Id   int,
  Ord_Amount       int,
  Promo_Id         int,
  Discount_Amount  Money
);
Run Code Online (Sandbox Code Playgroud)

现在,您的存储过程可以将此声明为只读输入参数:

CREATE PROCEDURE dbo.do_whatever
  @datatable dbo.whatever READONLY
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.destination_table(column_list)
    SELECT column_list FROM @datatable;
END
GO
Run Code Online (Sandbox Code Playgroud)

为什么你想在这里使用光标,或者认为你需要一个,我不确定.你可以ORDER BYINSERT...SELECT你认为有用的时候添加一个子句(并且有一些有意义的命令),但是如果你真的想在这里使用游标,你应该可以@datatable像对待任何其他游标一样声明一个表.