Database
 sql >> база данни >  >> RDS >> Database

Подаване на таблица с данни като параметър към съхранените процедури

Реалните приложения за бази данни трябва да правят множество заявки от предния край към базата данни, за да изпълняват всякакви функции.

Ако дадено приложение е с интензивни данни, като тези, използвани в банки или летища и т.н., броят на пътуванията с данни може да бъде огромен. Всяка заявка към база данни използва честотна лента и изисква време за изпълнение. Без параметрите с стойност на таблицата, предното приложение трябва да направи множество пътувания с данни, за да манипулира множество редове данни. Въпреки това, с параметри с таблично значение, множество редове могат да бъдат вмъкнати, актуализирани и изтрити от база данни с помощта на една параметризирана команда, която приема параметър с таблична стойност.

Параметър със стойност на таблица е параметър с тип таблица. Използвайки този параметър, можете да изпратите няколко реда данни към съхранена процедура или параметризирана SQL команда под формата на таблица. Transact-SQL може да се използва за достъп до стойностите на колоните на параметрите с таблица.

В тази статия ще проучим как можем да предадем таблица с данни към съхранена процедура. Нека обаче преди това да видим как са се предавали табличните данни преди параметрите с таблична стойност.

Предаване на данни в табличен вид преди параметри с стойност на таблица

Параметрите с таблично значение бяха въведени в SQL Server 2008. Преди това имаше ограничени опции за предаване на таблични данни към съхранените процедури. Повечето разработчици използваха един от следните методи:

  1. Данните в множество колони и редове бяха представени под формата на поредица от параметри. Въпреки това, максималният брой параметри, които могат да бъдат предадени на съхранена процедура на SQL Server, е 2100. Следователно, в случай на голяма маса, този метод не може да се използва. Освен това е необходима предварителна обработка от страна на сървъра, за да се форматират отделните параметри в табличен вид.
  2. Създайте множество SQL изрази, които могат да засегнат множество редове, като UPDATE. Извлеченията могат да се изпращат на сървъра поотделно или в пакетна форма. Дори ако са изпратени в групирана форма, операторите се изпълняват поотделно на сървъра.
  3. Друг начин е да използвате разделени низове или XML документи за групиране на данни от множество редове и колони и след това да предадете тези текстови стойности на параметризирани SQL изрази или съхранени процедури. Недостатъкът на този подход беше, че трябваше да потвърдите структурата на данните, за да разделите стойностите.

Предаване на таблица с данни като параметър към съхранените процедури

Сега нека видим как параметрите с таблично значение могат да се използват за изпращане на данни към съхранена процедура, без да се сблъсквате с някой от проблемите, обсъдени в предишния раздел. Параметрите със стойност на таблица позволяват да се предават множество редове данни към съхранена процедура от някакъв Transact-SQL код или от предно приложение. Максималният размер, който може да има параметър със стойност на таблица, е равен на максималния размер на паметта на сървъра на базата данни.

В този раздел ще използваме параметри с таблично стойности заедно със съхранена процедура, за да вмъкнем няколко реда в таблица с данни.

Предаването на параметри с таблична стойност към съхранена процедура е процес от три стъпки:

  1. Създайте дефиниран от потребителя тип таблица, която съответства на таблицата, която искате да попълните.
  2. Предаване на дефинираната от потребителя таблица на съхранената процедура като параметър
  3. Вътре в съхранената процедура изберете данните от предадения параметър и ги вмъкнете в таблицата, която искате да попълните.

Нека да разгледаме пример за това как можем да предадем таблица с данни към съхранена процедура, използвайки функцията с таблица.

Първо, създайте таблица, която искаме да попълним. Изпълнете следния скрипт:

CREATE DATABASE ShowRoom


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

В скрипта по-горе създаваме база данни, наречена ShowRoom с една таблица, т.е. Cars. Таблицата Cars има три колони:Id, Name и company. Ще използваме съхранена процедура, за да попълним таблицата Cars.

Както беше описано по-рано, първата стъпка е да създадете дефиниран от потребителя тип таблица, която съответства на таблицата, която искате да попълните. За да направите това, изпълнете следния скрипт:

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

В скрипта по-горе създаваме дефинираната от потребителя променлива CarTableType от типа Table. Това е променливата, която ще предадем на съхранената процедура. Може да се види, че колоните на променливата CarTableType са подобни на тези в таблицата Cars.

Сега нека създадем съхранена процедура, която приема променливата CarTableType като параметър. Вътре в съхранената процедура ще ИЗБЕРЕМ всички записи от тази променлива и ще ги вмъкнем в таблицата Cars. Изпълнете следния скрипт, за да създадете такава съхранена процедура:

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

В горния скрипт създаваме съхранената процедура spInsertCars. Важно е да се спомене, че трябва да посочите потребителски дефинирания параметър като ЧЕТЕНЕ САМО вътре в съхранената процедура, ако не го направите, води до грешка по време на изпълнение.

Можете да видите, че съхранената процедура spInsertCars приема параметъра CarTableType и го присвоява на променливата @CarType от типа CarTableType.

Последната стъпка е да създадете променлива на променливата CarTableType, да я попълните с фиктивни данни и да я предадете на съхранената процедура spInsertCars. Разгледайте следния скрипт:

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

В скрипта по-горе първо декларираме променливата @CarTableType от тип CarTableType. След това вмъкваме 5 фиктивни записа в тази променлива. Накрая изпълняваме съхранената процедура spInsertCars и й предаваме променливата @CarTableType като параметър.

Вътре в съхранената процедура се избират пет записа от променливата @CarTableType и се вмъкват в таблицата Cars. Сега, ако изберете всички записи от таблицата Cars, трябва да видите нововмъкнатите записи. За да направите това, изпълнете следния скрипт:

SELECT * FROM Cars

Резултатът от скрипта по-горе изглежда така:

От изхода може да се види, че всички записи от променливата @CarTableType са били вмъкнати в таблицата Cars.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 10 полезни ресурса за тези, които искат да научат повече за SQL

  2. SQL ВЪНШЕН КЛЮЧ

  3. Ограничаване на гъвкавостта на данните в NoSQL база данни

  4. Архивиране само на база данни в WHM

  5. Изследване на Java Unit Testing с JUnit Test Framework