Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Übergeben von c# DataTable als Parameter an eine gespeicherte Prozedur in MS SQL Server 2008

Zuerst müssen Sie einen Typ erstellen:

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

Jetzt kann Ihre gespeicherte Prozedur dies als schreibgeschützten Eingabeparameter deklarieren:

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

Ich bin mir nicht sicher, warum Sie hier einen Cursor verwenden möchten oder denken, dass Sie einen brauchen. Sie können einen ORDER BY hinzufügen -Klausel zu INSERT...SELECT wenn Sie denken, dass das nützlich sein wird (und es gibt etwas Sinnvolles zum Ordnen), aber ansonsten, wenn Sie wirklich wirklich einen Cursor hier wollen, sollten Sie in der Lage sein, einen gegen @datatable zu deklarieren genau wie bei jeder anderen Tabelle.