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

É possível fazer um procedimento armazenado Insert Into?


Você precisará fazer algumas coisas para fazer isso, já que seu parâmetro está obtendo vários valores, você precisa criar um tipo de tabela e fazer com que seu procedimento de armazenamento aceite um parâmetro desse tipo.

Como você está passando uma TABLE como parâmetro você precisará criar um TABLE TYPE algo como segue

TIPO DE TABELA
CREATE TYPE dbo.Prco_Table AS TABLE 
 (
    [Val1]         Data Type
    [Val2]         Data Type
  )
 GO

Procedimento armazenado para aceitar esse parâmetro de tipo
 CREATE PROCEDURE mainValues 
 @TableParam Prco_Table READONLY   --<-- Accepts a parameter of that type 
 AS                                  -- Note it is ReadOnly 
 BEGIN
    SET NOCOUNT ON;
  /* do your insert from this parameter or other cool stuff  */

  INSERT INTO Target_Table (Col1, Col2)
  SELECT [Val1] , [Val2]
  FROM  @TableParam    --<-- Table Type variable


END

EXECUTAR PROC

Declare uma variável desse tipo e preencha-a com seus valores.
 DECLARE @Table ClaimData(      --<-- Declare a variable of your type
          [Val1]         Data Type
          [Val2]         Data Type
                         ); 

 -- Populate the variable
   INSERT INTO @Table ([Val1],[Val2])
   SELECT testdesc, testoption
   FROM tableA
   WHERE testoption = 1

  EXECUTE mainValues  @Table --<-- Pass this variable of Table Type