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

Passaggio della tabella dati come parametro alle stored procedure

Le applicazioni di database del mondo reale devono effettuare più richieste dal front-end al database per eseguire tutti i tipi di funzioni.

Se un'applicazione è ad alta intensità di dati, come quelle utilizzate nelle banche o negli aeroporti, ecc., il numero di viaggi di dati può essere enorme. Ogni richiesta a un database utilizza la larghezza di banda e richiede tempo per l'esecuzione. Senza i parametri con valori di tabella, un'applicazione frontale deve effettuare più viaggi di dati per manipolare più righe di dati. Tuttavia, con i parametri con valori di tabella, è possibile inserire, aggiornare ed eliminare più righe da un database utilizzando un unico comando parametrizzato che accetta un parametro con valori di tabella.

Un parametro con valori di tabella è un parametro con un tipo di tabella. Utilizzando questo parametro è possibile inviare più righe di dati a una procedura memorizzata oa un comando SQL parametrizzato sotto forma di tabella. Transact-SQL può essere utilizzato per accedere ai valori delle colonne dei parametri con valori di tabella.

In questo articolo, studieremo come passare una tabella di dati a una stored procedure. Tuttavia, prima vediamo come i dati tabulari venivano passati prima dei parametri con valori di tabella.

Trasferimento di dati in forma tabellare prima dei parametri con valori di tabella

I parametri con valori di tabella sono stati introdotti in SQL Server 2008. In precedenza, le opzioni per passare i dati tabulari alle stored procedure erano limitate. La maggior parte degli sviluppatori ha utilizzato uno dei seguenti metodi:

  1. I dati in più colonne e righe sono stati rappresentati sotto forma di una serie di parametri. Tuttavia, il numero massimo di parametri che possono essere passati a una stored procedure di SQL Server è 2.100. Pertanto, nel caso di una tabella di grandi dimensioni, questo metodo non può essere utilizzato. Inoltre è necessaria una preelaborazione lato server per formattare i singoli parametri in forma tabellare.
  2. Crea più istruzioni SQL che possono influire su più righe, come UPDATE. Le dichiarazioni possono essere inviate al server singolarmente o in forma batch. Anche se vengono inviate in forma batch, le istruzioni vengono eseguite singolarmente sul server.
  3. Un altro modo consiste nell'utilizzare stringhe delimitate o documenti XML per raggruppare i dati da più righe e colonne e quindi passare questi valori di testo a istruzioni SQL parametrizzate o procedure memorizzate. Lo svantaggio di questo approccio era che era necessario convalidare la struttura dei dati per separare i valori.

Passaggio della tabella dei dati come parametro alle stored procedure

Ora vediamo come utilizzare i parametri con valori di tabella per inviare dati a una stored procedure senza affrontare nessuno dei problemi discussi nella sezione precedente. I parametri con valori di tabella consentono di passare più righe di dati a una stored procedure tramite codice Transact-SQL o da un'applicazione front-end. La dimensione massima che può avere un parametro con valori di tabella è uguale alla dimensione massima della memoria del server di database.

In questa sezione utilizzeremo parametri con valori di tabella insieme a una procedura memorizzata per inserire più righe in una tabella di dati.

Il passaggio di parametri con valori di tabella a una stored procedure è un processo in tre fasi:

  1. Crea un tipo di tabella definito dall'utente che corrisponda alla tabella che desideri popolare.
  2. Passa la tabella definita dall'utente alla procedura memorizzata come parametro
  3. All'interno della procedura memorizzata, seleziona i dati dal parametro passato e inseriscilo nella tabella che vuoi popolare.

Diamo un'occhiata a un esempio di come possiamo passare una tabella di dati a una procedura memorizzata utilizzando la funzione con valori di tabella.

Innanzitutto, crea una tabella che vogliamo popolare. Esegui il seguente script:

CREATE DATABASE ShowRoom


USE ShowRoom
Create Table Cars
(
    Id int primary key,
    Name nvarchar(50),
    company nvarchar(50)
)
Go

Nello script sopra, creiamo un database chiamato ShowRoom con una tabella, ad esempio Cars. La tabella Cars ha tre colonne:Id, Name e company. Useremo una procedura memorizzata per popolare la tabella Cars.

Come descritto in precedenza, il primo passaggio consiste nel creare un tipo di tabella definito dall'utente che corrisponda alla tabella che si desidera popolare. Esegui il seguente script per farlo:

CREATE TYPE CarTableType AS TABLE
(
     Id int primary key,
    Name nvarchar(50),
    company nvarchar(50)
)
Go

Nello script sopra, creiamo la variabile definita dall'utente CarTableType del tipo Table. Questa è la variabile che passeremo alla stored procedure. Si può notare che le colonne della variabile CarTableType sono simili a quelle della tabella Cars.

Creiamo ora una stored procedure che accetti la variabile CarTableType come parametro. All'interno della procedura memorizzata, SELEZIONIAMO tutti i record da questa variabile e li inseriremo nella tabella Cars. Eseguire lo script seguente per creare tale procedura memorizzata:

CREATE PROCEDURE spInsertCars
@CarType CarTableType READONLY
AS
BEGIN
    INSERT INTO Cars
    SELECT * FROM @CarType
END

Nello script precedente, creiamo la stored procedure spInsertCars. È importante ricordare che è necessario specificare il parametro definito dall'utente come READONLY all'interno della procedura memorizzata, in caso contrario si verificherà un errore di runtime.

Puoi vedere che la stored procedure spInsertCars accetta il parametro CarTableType e lo assegna alla variabile @CarType del tipo CarTableType.

Il passaggio finale consiste nel creare una variabile della variabile CarTableType, popolarla con dati fittizi e passarla alla stored procedure spInsertCars. Dai un'occhiata al seguente script:

DECLARE @CarTableType CarTableType

INSERT INTO @CarTableType VALUES (1, 'Corrolla', 'Toyota')
INSERT INTO @CarTableType VALUES (2, 'Civic', 'Honda')
INSERT INTO @CarTableType VALUES (3, '6', 'Audi')
INSERT INTO @CarTableType VALUES (4, 'c100', 'Mercedez')
INSERT INTO @CarTableType VALUES (5, 'Mustang', 'Ford')

EXECUTE spInsertCars @CarTableType

Nello script precedente, dichiariamo prima la variabile @CarTableType di tipo CarTableType. Quindi inseriamo 5 record fittizi in questa variabile. Infine, eseguiamo la stored procedure spInsertCars e le passiamo la variabile @CarTableType come parametro.

All'interno della stored procedure, vengono selezionati cinque record dalla variabile @CarTableType e inseriti nella tabella Cars. Ora se selezioni tutti i record dalla tabella Auto, dovresti vedere i record appena inseriti. Esegui il seguente script per farlo:

SELECT * FROM Cars

L'output dello script sopra è simile al seguente:

Dall'output si può vedere che tutti i record della variabile @CarTableType sono stati inseriti nella tabella Cars.