Database
 sql >> Baza danych >  >> RDS >> Database

Przekazywanie tabeli danych jako parametru do procedur składowanych

Rzeczywiste aplikacje bazodanowe muszą wysyłać wiele żądań z interfejsu użytkownika do bazy danych, aby wykonywać różnego rodzaju funkcje.

Jeśli aplikacja intensywnie wykorzystuje dane, na przykład w bankach, na lotniskach itp., liczba podróży danych może być ogromna. Każde żądanie do bazy danych wykorzystuje przepustowość i wymaga czasu na wykonanie. Bez parametrów wycenianych w tabeli aplikacja frontowa musi wykonać wiele podróży danych w celu manipulowania wieloma wierszami danych. Jednak w przypadku parametrów wycenianych w tabeli wiele wierszy można wstawiać, aktualizować i usuwać z bazy danych za pomocą jednego sparametryzowanego polecenia, które pobiera parametr wyceniany w tabeli.

Parametr wyceniany w tabeli to parametr o typie tabeli. Za pomocą tego parametru można wysłać wiele wierszy danych do procedury składowanej lub sparametryzowanego polecenia SQL w postaci tabeli. Transact-SQL może być używany do uzyskiwania dostępu do wartości kolumn parametrów wycenianych w tabeli.

W tym artykule przeanalizujemy, w jaki sposób możemy przekazać tabelę danych do procedury składowanej. Jednak wcześniej zobaczmy, jak dane tabelaryczne były przekazywane przed parametrami wycenianymi w tabeli.

Przekazywanie danych w formie tabelarycznej przed parametrami o wartościach w tabeli

Parametry wyceniane w tabeli zostały wprowadzone w SQL Server 2008. Wcześniej istniały ograniczone opcje przekazywania danych tabelarycznych do procedur składowanych. Większość programistów używała jednej z następujących metod:

  1. Dane w wielu kolumnach i wierszach były reprezentowane w postaci serii parametrów. Jednak maksymalna liczba parametrów, które można przekazać do procedury składowanej programu SQL Server, wynosi 2100. Dlatego w przypadku dużego stołu nie można było zastosować tej metody. Ponadto po stronie serwera wymagane jest wstępne przetwarzanie w celu sformatowania poszczególnych parametrów w formie tabelarycznej.
  2. Utwórz wiele instrukcji SQL, które mogą wpływać na wiele wierszy, np. UPDATE. Wyciągi mogą być wysyłane na serwer pojedynczo lub w formie zbiorczej. Nawet jeśli są wysyłane w formie zbiorczej, instrukcje są wykonywane indywidualnie na serwerze.
  3. Innym sposobem jest użycie rozdzielanych łańcuchów lub dokumentów XML do łączenia danych z wielu wierszy i kolumn, a następnie przekazanie tych wartości tekstowych do sparametryzowanych instrukcji SQL lub procedur składowanych. Wadą tego podejścia było to, że trzeba było zweryfikować strukturę danych, aby rozdzielić wartości.

Przekazywanie tabeli danych jako parametru do procedur składowanych

Zobaczmy teraz, jak parametry wyceniane w tabeli mogą być używane do wysyłania danych do procedury składowanej bez napotykania problemów omówionych w poprzedniej sekcji. Parametry wyceniane w tabeli umożliwiają przekazywanie wielu wierszy danych do procedury składowanej za pomocą kodu Transact-SQL lub aplikacji frontonu. Maksymalny rozmiar, jaki może mieć parametr wyceniany w tabeli, jest równy maksymalnemu rozmiarowi pamięci serwera bazy danych.

W tej sekcji użyjemy parametrów wycenianych w tabeli wraz z procedurą składowaną, aby wstawić wiele wierszy do tabeli danych.

Przekazywanie parametrów z wartościami przechowywanymi w tabeli do procedury składowanej to trzyetapowy proces:

  1. Utwórz typ tabeli zdefiniowany przez użytkownika, który odpowiada tabeli, którą chcesz wypełnić.
  2. Przekaż tabelę zdefiniowaną przez użytkownika do procedury składowanej jako parametr
  3. Wewnątrz procedury składowanej wybierz dane z przekazanego parametru i wstaw je do tabeli, którą chcesz wypełnić.

Rzućmy okiem na przykład, jak możemy przekazać tabelę danych do procedury składowanej za pomocą funkcji o wartościach tabelarycznych.

Najpierw utwórz tabelę, którą chcemy wypełnić. Wykonaj następujący skrypt:

CREATE DATABASE ShowRoom


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

W powyższym skrypcie tworzymy bazę danych o nazwie ShowRoom z jedną tabelą tj. Samochody. Tabela Samochody ma trzy kolumny:Id, Nazwa i firma. Użyjemy procedury składowanej do wypełnienia tabeli Samochody.

Jak opisano wcześniej, pierwszym krokiem jest utworzenie typu tabeli zdefiniowanej przez użytkownika odpowiadającego tabeli, którą chcesz wypełnić. W tym celu wykonaj następujący skrypt:

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

W powyższym skrypcie tworzymy zdefiniowaną przez użytkownika zmienną CarTableType typu Table. Jest to zmienna, którą przekażemy do procedury składowanej. Widać, że kolumny zmiennej CarTableType są podobne do tych w tabeli Samochody.

Teraz utwórzmy procedurę składowaną, która akceptuje zmienną CarTableType jako parametr. Wewnątrz procedury składowanej wybierzemy wszystkie rekordy z tej zmiennej i wstawimy je do tabeli Samochody. Wykonaj następujący skrypt, aby utworzyć taką procedurę składowaną:

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

W powyższym skrypcie tworzymy procedurę składowaną spInsertCars. Ważne jest, aby wspomnieć, że musisz określić parametr zdefiniowany przez użytkownika jako READONLY w procedurze składowanej, w przeciwnym razie spowoduje to błąd w czasie wykonywania.

Widać, że procedura składowana spInsertCars akceptuje parametr CarTableType i przypisuje go do zmiennej @CarType typu CarTableType.

Ostatnim krokiem jest utworzenie zmiennej zmiennej CarTableType, wypełnienie jej fikcyjnymi danymi i przekazanie do procedury składowanej spInsertCars. Spójrz na następujący skrypt:

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

W powyższym skrypcie najpierw deklarujemy zmienną @CarTableType typu CarTableType. Następnie wstawiamy do tej zmiennej 5 fikcyjnych rekordów. Na koniec wykonujemy procedurę składowaną spInsertCars i przekazujemy jej zmienną @CarTableType jako parametr.

Wewnątrz procedury składowanej pięć rekordów ze zmiennej @CarTableType jest wybieranych i wstawianych do tabeli Samochody. Teraz, jeśli wybierzesz wszystkie rekordy z tabeli Samochody, powinieneś zobaczyć nowo wstawione rekordy. W tym celu wykonaj następujący skrypt:

SELECT * FROM Cars

Wynik powyższego skryptu wygląda tak:

Z danych wyjściowych widać, że wszystkie rekordy ze zmiennej @CarTableType zostały wstawione do tabeli Samochody.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Serwowanie pysznego jedzenia (i danych) — model danych dla restauracji

  2. Nazewnictwo produktów IRI i architektura

  3. Sterownik ODBC Quickbooks

  4. Lepiej ALTER niż DROP

  5. Wizualizacja danych