Megosztás a következőn keresztül:


Táblaértékű paraméterek használata (adatbázismotor)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-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 INTO vagy INSERT EXEC utasítás céljaként. Egy táblázattal értékelhető paraméter szerepelhet a FROM záradékában a SELECT INTO-ben, a INSERT EXEC karakterlá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)