sql >> Base de Datos >  >> RDS >> Sqlserver

Pasar c # DataTable como parámetro al procedimiento almacenado en MS SQL Server 2008

Primero necesitas crear un tipo:

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

Ahora su procedimiento almacenado puede declarar esto como un parámetro de entrada de solo lectura:

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

Por qué quiere usar un cursor aquí, o cree que necesita uno, no estoy seguro. Puede agregar un ORDER BY cláusula al INSERT...SELECT si cree que será útil (y hay algo significativo para ordenar), pero de lo contrario, si realmente quiere un cursor aquí, debería poder declarar uno contra @datatable como lo harías con cualquier otra mesa.