Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
A táblaértékelt paraméterek deklarálása felhasználó által definiált táblatípusok használatával történik. Táblaértékű paraméterekkel több adatsort küldhet egy Transact-SQL utasításba vagy rutinba, például tárolt eljárásba vagy függvénybe anélkül, hogy ideiglenes táblát vagy több paramétert hoz létre.
A táblaértékű paraméterek olyanok, mint az OLE DB-ben és az ODBC-ben található paramétertömbök, de nagyobb rugalmasságot és szorosabb integrációt biztosítanak a Transact-SQL-sel. A táblaértékkel rendelkező paramétereknek az az előnye is, hogy részt vehetnek a set-alapú műveletekben.
Transact-SQL táblázatértékes paramétereket továbbít a rutinoknak, hogy ne készítsen másolatot a bemeneti adatokról. Transact-SQL rutinokat táblaértékkel rendelkező paraméterekkel hozhat létre és hajthat végre, és meghívhatja őket Transact-SQL kódból, felügyelt és natív ügyfelekből bármilyen felügyelt nyelven.
Benefits
A táblaértékű paraméterek hatóköre a tárolt eljárásra, függvényre vagy dinamikus Transact-SQL szövegre terjed ki, pontosan úgy, mint más paraméterek. Hasonlóképpen, a táblatípusú változók hatóköre olyan, mint bármely más helyi változó, amely DEKLARÁL utasítással jön létre. A táblaértékelt változókat dinamikus Transact-SQL utasításokban deklarálhatja, és ezeket a változókat táblaértékkel megadott paraméterekként továbbíthatja a tárolt eljárásoknak és függvényeknek.
A táblaértékelő paraméterek nagyobb rugalmasságot és bizonyos esetekben jobb teljesítményt nyújtanak, mint az ideiglenes táblák, vagy más módszerek a paraméterek listájának átadására. A táblaértékelő paraméterek a következő előnyöket kínálják:
- Ne szerezzen be zárolásokat az adatok kezdeti sokaságához egy ügyféltől.
- Adjon meg egy egyszerű programozási modellt.
- Lehetővé teszi összetett üzleti logika egyetlen rutinba való belefoglalását.
- Csökkentse a kiszolgálóra való oda-vissza utakat.
- Különböző számosságú táblázatszerkezettel rendelkezhet.
- Erősen típusos.
- Engedélyezze az ügyfél számára a rendezési sorrend és az egyedi kulcsok megadását.
- A tárolt eljárásban való használatkor a gyorsítótárazás úgy történik, mint egy ideiglenes táblánál. Az SQL Server 2012 (11.x) és az újabb verziókban a táblaértékkel rendelkező paraméterek szintén gyorsítótárazásra kerülnek a paraméteres lekérdezésekhez.
Permissions
A felhasználónak rendelkeznie kell EXECUTE és REFERENCES engedélyekkel a felhasználó által definiált táblatípuspéldányának létrehozásához, vagy a táblázatértékű paramétert tartalmazó tárolt eljárás meghívásához a típusra, vagy az azt tartalmazó sémára vagy adatbázisra vonatkozóan.
Limitations
A táblaértékelő paraméterekre a következő korlátozások vonatkoznak:
- Az SQL Server nem tartja fenn a táblaértékelt paraméterek oszlopainak statisztikáit.
- A táblaértékelt paramétereket bemeneti READONLY paraméterként kell átadni Transact-SQL rutinok számára. A rutin törzsében nem hajthat végre olyan DML-műveleteket a táblázatként kezelt paraméteren, mint az UPDATE, a DELETE vagy az INSERT.
- Táblaértékkel rendelkező paraméter nem használható
SELECT INTOvagyINSERT EXECutasítás céljaként. Egy táblázattal értékelhető paraméter szerepelhet aFROMzáradékában aSELECT INTO-ben, aINSERT EXECkarakterláncban vagy a tárolt eljárásban.
Táblaértékkel megadott paraméterek szemben a TÖMEGES BESZÚRÁS műveletekkel
A táblaértékes paraméterek használata összehasonlítható a set-based változók használatának más módjaival; azonban a táblaértékű paraméterek gyakori használata gyorsabb lehet a nagy adathalmazok esetében. A táblaértékelő paramétereknél nagyobb indítási költséggel rendelkező tömeges műveletekhez képest a táblaértékelő paraméterek 1000-nél kevesebb sor beszúrásához jól működnek.
Az újrafelhasznált tábla formátumú paraméterek kihasználják az ideiglenes tábla gyorsítótárazását. A tábla gyorsítótárazás jobb méretezhetőséget tesz lehetővé, mint az egyenértékű tömeges beszúrási műveletek. A kis sorbeszúrási műveletek kis teljesítménybeli előnyt biztosíthatnak paraméterlisták vagy kötegelt utasítások használatával BULK INSERT műveletek vagy táblaértékkel rendelkező paraméterek helyett. Ezek a módszerek azonban kevésbé kényelmesek a programhoz, és a sorok növekedésével a teljesítmény gyorsan csökken.
A táblaértékkel rendelkező paraméterek ugyanolyan jól vagy jobban teljesítenek, mint egy egyenértékű paramétertömb implementációja.
Examples
Az alábbi példa Transact-SQL használ, és bemutatja, hogyan hozhat létre táblaértékű paramétertípust, deklarálhat egy változót, hogy hivatkozzon rá, töltse ki a paraméterlistát, majd adja át az értékeket egy tárolt eljárásnak a minta AdventureWorks adatbázisban.
/* Create a table type. */
CREATE TYPE LocationTableType
AS TABLE
( LocationName VARCHAR(50)
, CostRate INT );
GO
/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE dbo. usp_InsertProductionLocation
@TVP LocationTableType READONLY
AS
SET NOCOUNT ON
INSERT INTO AdventureWorks2022.Production.Location
(
Name
, CostRate
, Availability
, ModifiedDate
)
SELECT *, 0, GETDATE()
FROM @TVP;
GO
/* Declare a variable that references the type. */
DECLARE @LocationTVP AS LocationTableType;
/* Add data to the table variable. */
INSERT INTO @LocationTVP (LocationName, CostRate)
SELECT Name, 0.00
FROM AdventureWorks2022.Person.StateProvince;
/* Pass the table variable data to a stored procedure. */
EXEC usp_InsertProductionLocation @LocationTVP;
A várt eredményhalmaz a következő:
(181 rows affected)