3

我想将DataDable作为包含以下列的参数传递给存储过程

Supp_Id          int
Del_Methode_Id   int
Ord_Ammount      int
Promo_Id         int
Discount_Ammount Money

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

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

4

1 回答 1

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

为什么你想在这里使用光标,或者认为你需要一个,我不确定。您可以在if 您认为有用的子句中添加一个ORDER BY子句(并且有一些有意义的排序依据),但否则,如果您真的真的想要一个游标,您应该能够像声明任何其他游标一样声明一个反对桌子。INSERT...SELECT@datatable

于 2013-08-06T12:25:57.313 回答