Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Passando c# DataTable como parâmetro para procedimento armazenado no MS SQL Server 2008


Primeiro você precisa criar um tipo:
CREATE TYPE dbo.whatever AS TABLE
(
  Supp_Id          int, 
  Del_Methode_Id   int,
  Ord_Amount       int,
  Promo_Id         int,
  Discount_Amount  Money
);

Agora seu procedimento armazenado pode declarar isso como um parâmetro de entrada somente leitura:
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 que você quer usar um cursor aqui, ou acha que precisa de um, não tenho certeza. Você pode adicionar um ORDER BY cláusula para o INSERT...SELECT se você acha que isso será útil (e há algo significativo para ordenar), mas caso contrário, se você realmente quiser um cursor aqui, poderá declarar um em @datatable como faria para qualquer outra mesa.