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

时间:2013-08-06 12:20:49

标签: sql sql-server sql-server-2008 datatable cursor

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

Supp_Id          int
Del_Methode_Id   int
Ord_Ammount      int
Promo_Id         int
Discount_Ammount Money

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

请告诉我如何在存储过程中声明数据表参数,然后在参数上使用光标

1 个答案:

答案 0 :(得分:10)

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

CREATE TYPE dbo.whatever AS TABLE
(
  Supp_Id          int, 
  Del_Methode_Id   int,
  Ord_Amount       int,
  Promo_Id         int,
  Discount_Amount  Money
);

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

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

为什么你想在这里使用光标,或者认为你需要一个,我不确定。你可以在ORDER BY中添加一个INSERT...SELECT子句,如果你觉得它有用(并且有一些有意义的东西可以订购),但是如果你真的想要一个光标在这里,你应该能够如同对任何其他表一样,对@datatable声明一个。