2014-07-27 11 views
5

Come posso passare un elenco di dati di colonna in una stored procedure?Inserimento di un elenco di valori in una tabella di SQL Server con stored procedure

mio stored procedure è

ALTER PROCEDURE [dbo].[Register] 
    @Id  int, 
    @Name nvarchar(50) 
AS 
BEGIN 
    BEGIN TRY 
     INSERT INTO dbo.Group (Id, Name) 
     VALUES(@Id, @Name) 

     SELECT 0 
    END TRY 
    BEGIN CATCH 
     SELECT -1 
    END CATCH 
END 
GO 

voglio passare in questo modo i dati per l'inserimento in questa tabella

@Id = 1,2,3,4,5 
@Name = 'test1,test2,test3,test4,test5' 

e risultato come questo

Id Name 
1 test1 
2 test2 
3 test3 
4 test4 
5 test5 

risposta

8

una "lista" o " array "in SQL Server è ..... a tabella. Quindi, se siete su SQL Server 2008 o più recente (non è stato specificato), quindi utilizzare la parametri con valori di tabella funzionalità di SQL Server per passare un tavolo di valore al tuo stored procedure

-- Create a table type to match your input parameters 
CREATE TYPE IdNameTable AS TABLE 
(ID INT, Name NVARCHAR(50)); 
GO 

-- change your stored procedure to accept such a table type parameter 
ALTER PROCEDURE [dbo].[Register] 
    @Values IdNameTable READONLY 
AS 
BEGIN 
    BEGIN TRY 
     INSERT INTO dbo.Group (Id, Name) 
      -- get the values from the table type parameter 
      SELECT 
      Id, Name 
      FROM 
      @Values 

     SELECT 0 
    END TRY 
    BEGIN CATCH 
     SELECT -1 
    END CATCH 
END 
GO 

Vedere la vasto e liberamente disponibileSQL Server Books Online documentation per maggiori dettagli sulla funzione dei parametri con valori di tabella e come usarlo

Se si desidera utilizzare questo da T-SQL, utilizzare questo codice:

-- declare a variable of that table type 
DECLARE @InputTable IdNameTable 

-- insert values into that table variable 
INSERT INTO @InputTable(ID, Name) 
VALUES (1, 'Test 1'), (2, 'Test 2') 

-- execute your stored procedure with this table as input parameter 
EXECUTE [dbo].[Register] @InputTable 

Se si desidera utilizzare questo da C# o VB.NET, vedere il collegamento di Michael Edenfield nei commenti.

+1

http://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx per come utilizzare questi da C# –

+0

Sarà utile, se si aggiorna come passare i dati al parametro di procedura ... – Jesuraja

+0

@marc_s thanky veryyyy veryyy, ma una questio. come uso la procedura memorizzata exec? passare il valore? dopo aver eseguito questa procedura memorizzata, e voglio che AlTER ottenga questo errore, digita "IdNameTable" già esistente, o non hai il permesso di crearlo. per favore aiutami –

Problemi correlati