且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-11-27 12:13:55

首先需要创建一个类型:

First you need to create a type:

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

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

Now your stored procedure can declare this as a read only input parameter:

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

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

Why you want to use a cursor here, or think you need one, I'm not sure. You can add an ORDER BY clause to the INSERT...SELECT if you think that will be useful (and there is something meaningful to order by), but otherwise if you really really want a cursor here you should be able to declare one against @datatable just as you would for any other table.