Aracılığıyla paylaş


Tablo değerli parametreleri kullanma (Veritabanı Altyapısı)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Tablo değerli parametreler, kullanıcı tanımlı tablo türleri kullanılarak bildirilir. Tablo değerli parametreleri kullanarak geçici bir tablo veya birçok parametre oluşturmadan bir Transact-SQL deyimine veya saklı yordam veya işlev gibi bir yordama birden çok veri satırı gönderebilirsiniz.

Tablo değerli parametreler, OLE DB ve ODBC'deki parametre dizilerine benzer, ancak Transact-SQL ile daha fazla esneklik ve daha güçlü entegrasyon imkanı sunar. Tablo değerli parametreler, küme tabanlı işlemlere katılabilme avantajına da sahiptir.

Transact-SQL, giriş verilerinin kopyasını oluşturmaktan kaçınmak için tablo değerli parametreleri referans kullanarak yordamlara geçirir. Tablo değerli parametrelerle Transact-SQL yordamları oluşturup yürütebilir ve bunları herhangi bir yönetilen dilde Transact-SQL koddan, yönetilen ve yerel istemcilerden çağırabilirsiniz.

Benefits

Tablo değerli parametrenin kapsamı, diğer parametreler gibi saklı yordam, işlev veya dinamik Transact-SQL metin olarak belirlenmiştir. Benzer şekilde, tablo türündeki bir değişkenin kapsamı, DECLARE deyimi kullanılarak oluşturulan diğer yerel değişkenler gibidir. Dinamik Transact-SQL deyimleri içinde tablo değerli değişkenler bildirebilir ve bu değişkenleri saklı yordamlara ve işlevlere tablo değerli parametreler olarak geçirebilirsiniz.

Tablo türünde parametreler, geçici tablolar veya parametre listesinin iletilmesine yönelik diğer yöntemlerden daha fazla esneklik ve bazı durumlarda daha iyi performans sunar. Tablo değerli parametreler aşağıdaki avantajları sunar:

  • İstemciden ilk veri popülasyonu için kilitler almayın.
  • Basit bir programlama modeli sağlayın.
  • Karmaşık iş mantığını tek bir rutine dahil etmenizi sağlar.
  • Sunucuya gidiş dönüşleri azaltın.
  • Farklı kardinaliteye sahip bir tablo yapısına sahip olabilir.
  • Türleri sıkı bir şekilde tanımlanmıştır.
  • Sıralama düzenini ve benzersiz anahtarları belirtmek için istemciyi etkinleştirin.
  • Saklı yordamda kullanıldığında geçici tablo gibi önbelleğe alınır. SQL Server 2012 (11.x) ve sonraki sürümlerden başlayarak, tablo değerli parametreler de parametreli sorgular için önbelleğe alınır.

Permissions

Kullanıcı tanımlı tablo türünün bir örneğini oluşturmak veya tablo değerli bir parametreyle saklı yordamı çağırmak için, kullanıcının tür üzerinde veya türü içeren şemada veya veritabanında EXECUTE ve REFERENCES izinlerine sahip olması gerekir.

Limitations

Tablo-değerli parametreler şu kısıtlamalara sahiptir:

  • SQL Server, tablo değerli parametrelerin sütunlarıyla ilgili istatistikleri korumaz.
  • Tablo değerli parametreler, Transact-SQL yordamlarına READONLY giriş parametreleri olarak geçirilmelidir. Bir yordamın gövdesindeki tablo değerli bir parametrede UPDATE, DELETE veya INSERT gibi DML işlemleri gerçekleştiremezsiniz.
  • Tablo değerli bir parametreyi SELECT INTO veya INSERT EXEC ifadesinin hedefi olarak kullanamazsınız. Tablo türünde bir parametre, bir FROM deyiminin veya bir SELECT INTO dizesi ya da saklı yordamın içinde olabilir.

BULK INSERT İşlemleri ile Tablo Değerli Parametrelerin Karşılaştırması

Tablo değerli parametrelerin kullanılması, set tabanlı değişkenleri kullanmanın diğer yöntemleriyle karşılaştırılabilir; ancak tablo değerli parametreleri sık sık kullanmak büyük veri kümeleri için daha hızlı olabilir. Tablo değerli parametrelerden daha yüksek başlangıç maliyetine sahip toplu işlemlerle karşılaştırıldığında, tablo değerli parametreler 1.000'den az satır eklemek için iyi performans gösterir.

Yeniden kullanılan tablo değerli parametreler, geçici tablo önbelleğe alma avantajından yararlanır. Bu tablo önbelleğe alma, eşdeğer toplu ekleme işlemlerinden daha iyi ölçeklenebilirlik sağlar. Küçük satır ekleme işlemleri, BULK INSERT işlemleri veya tablo değerli parametreler yerine, parametre listeleri veya toplu ifadeler kullanarak küçük bir performans avantajı sağlayabilir. Ancak, bu yöntemler program için daha az uygundur ve satırlar arttıkça performans hızla azalır.

Tablo değerli parametreler eşdeğer bir parametre dizisi uygulamasından eşit veya daha iyi performans gösterir.

Examples

Aşağıdaki örnekte Transact-SQL kullanılır ve tablo değerli parametre türü oluşturma, buna başvurmak üzere bir değişken bildirme, parametre listesini doldurma ve ardından değerleri örnek AdventureWorks veritabanındaki saklı yordama geçirme işlemleri gösterilmektedir.

/* 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;

Beklenen sonuç kümesi:

(181 rows affected)