Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Passaggio di c# DataTable come parametro alla stored procedure in MS SQL Server 2008

Per prima cosa devi creare un tipo:

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

Ora la tua procedura memorizzata può dichiararlo come parametro di input di sola lettura:

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

Perché vuoi usare un cursore qui, o pensi di averne bisogno, non sono sicuro. Puoi aggiungere un ORDER BY clausola al INSERT...SELECT se pensi che possa essere utile (e c'è qualcosa di significativo da ordinare), ma altrimenti se vuoi davvero un cursore qui dovresti essere in grado di dichiararne uno contro @datatable proprio come faresti per qualsiasi altro tavolo.