Aracılığıyla paylaş


odbc tablo Valued parametreleri kullanır

Bu konu ile odbc tablo valued parametreleri kullanarak birincil kullanıcı senaryoları açıklanır:

  • Tablo Valued parametre ile tamamen bağımlı Multirow arabellekleri (tüm değerlerini hafızasında tvp olarak verileri Gönder)

  • Tablo Valued parametre satır akış (Gönder verileri kullanarak veri yürütme tvp olarak) ile

  • Sistem Kataloğu'ndan tablo Valued parametre meta veri alma

  • Bir hazır deyimi için tablo Valued parametre meta veri alma

Tablo Valued parametre ile tamamen bağımlı Multirow arabellekleri (tüm değerlerini hafızasında tvp olarak verileri Gönder)

Tam bağımlı multirow arabellekleri ile kullanıldığında, tüm parametre değerleri hafızasına mevcuttur. Bu, örneğin bir oltp hareketin, içinde tablo değerli parametreler saklı bir yordam paketlenmiş olabilir normaldir. Tablo valued parametreler bu karmaşık multi-statement toplu dinamik olarak oluşturma veya sunucu için birden fazla görüşme yaparak görev alacak.

Tablo valued parametre kendisi kullanarak bağlı SQLBindParameter ile birlikte diğer parametreleri. Tüm parametreleri bağlı sonra uygulama her tablo değerli parametre ve aramalar sql_sopt_ss_param_focus, bir parametre odak öznitelik ayarlar SQLBindParametertablo değerli parametresi sütunları için.

Sunucu türü tablo değerli bir parametre için yeni bir ise SQL Server-belirli tip, sql_ss_table. sql_ss_table bağlama c türü her zaman sql_c_default olmalıdır. Parametre tablo değerli parametresi bağlı için hiçbir veri aktarılır; Bu tablo meta veri aktarmak ve kurucu sütunları tablo değerli parametre veri geçmek nasıl denetlemek için kullanılır.

Tablo valued parametre uzunluğu, sunucuya gönderilen satır sayısı için ayarlanır. ColumnSizeParametresi SQLBindParameteriçin tablo değerli bir parametre olan gönderilebilir; satır sayısı üst sınırını belirtir sütun arabellekleri dizi boyutu budur. ParameterValuePtrTablo değerli bir parametre için parametre arabelleği SQLBindParameter. ParameterValuePtrve onun ilişkili BufferLengthgerektiğinde tablo değerli parametre türü adı geçmek için kullanılır. Tür adı saklı yordam çağrıları için gerekli değildir, ancak sql deyimleri için gereklidir.

Ne zaman bir tablo değerli parametre türü adı belirtilen tarih aramak için SQLBindParameter, her zaman Unicode değeri, hatta ANSI uygulamaları oluşturulan uygulamalar olarak belirtilmelidir. Ne zaman belirttiğiniz tablo değerli parametre türü adı kullanarak SQLSetDescField, sen-ebilmek kullanma uygulama inşa edilmiştir şekilde uyan bir sabit değer. odbc Sürücü Yöneticisi'nin gerekli herhangi bir Unicode dönüşüm gerçekleştirir.

Tablo değerli parametreleri ve tablo değerli parametresi sütunları meta verileri manipüle ayrı ayrı ve açık olarak kullanarak SQLGetDescRec, SQLSetDescRec, SQLGetDescField, ve SQLSetDescField. Ancak, aşırı SQLBindParametergenellikle daha rahat ve açık tanımlayıcısı erişim çoğu zaman gerektirmez. Bu yaklaşım tanımı ile tutarlı SQLBindParameterdiğer veri türleri için dışında tablo değerli bir parametre için etkilenen tanımlayıcısı alanları farklı.

Bazen bir uygulama ile dinamik sql tablo değerli bir parametre kullanır ve tablo değerli parametre türü adı sağlanmalı. Bu durumda ve bağlantı için geçerli varsayılan şema tablo valued parametre tanımlanmamış, sql_ca_ss_type_catalog_name ve sql_ca_ss_type_schema_name kullanılarak ayarlanmalıdır SQLSetDescField. Aynı veritabanında tablo türü tanımları ve tablo valued parametreler olması gerektiğinden, tablo değerli parametreleri uygulama kullanıyorsa, sql_ca_ss_type_catalog_name ayarlanmamalıdır. Aksi takdirde, SQLSetDescFieldbir hata rapor edecek.

Bu senaryo için örnek kod yordamı içinde olduğunu demo_fixed_TVP_bindingde Tablo Valued Parametreler (odbc) kullan.

Tablo Valued parametre satır akış (Gönder verileri kullanarak veri yürütme tvp olarak) ile

Bu senaryoda, uygulama, onları istediği gibi sürücü satırları temini ve sunucuya akış vardır. Bu, tüm satırlar tampon belleğe sahip engeller. Bu toplu ekleme/güncelleme senaryolarını temsilcisidir. Tablo değerli parametreleri parametre dizileri ve toplu arasında bir yerde performans noktası sağlama kopyası. Yani, tablo değerli parametreleri parametre dizileri program hakkında kolay, ama onlar sunucuda büyük esneklik sağlar.

Tablo valued parametre ve sütunlarını tablo Valued parametre ile tamamen bağımlı Multirow arabellekleri, önceki bölümde anlatıldığı gibi bağlı ancak uzunluğu göstergesi tablo valued parametre kendisini sql_data_at_exec için ayarlanır. Sürücü yanıt SQLExecuteveya SQLExecuteDirectzamanki yürütme sırasında veri parametreleri için — yani, sırasında veri sql_need_data dönen tarafından. Sürücü için tablo değerli bir parametre veri kabul etmeye hazır olduğunda SQLParamDatadeğerini döndürür ParameterValuePtrde SQLBindParameter.

Bir uygulamanın kullandığı SQLPutDatatablo değerli bir parametre için parametre tablo değerli kurucu sütunlar veri kullanılabilirliğini gösteren için. Ne zaman SQLPutDatatablo değerli bir parametre için denir DataPtrher zaman null olmalıdır ve StrLen_or_Ind0 veya birkaç tablo değerli parametresi arabellekleri için belirtilen dizinin boyutuna eşit veya daha az olmalıdır ( ColumnSizeparametre). 0 ettiğinizi hiçbir daha fazla satır tablo değerli parametresi için ve sürücü devam edecek sonraki gerçek yordamın parametre işleme. Ne zaman StrLen_or_Indise non–table değerli parametre parametreler bağlı olarak değil 0, sürücü kurucu tablo değerli parametresi sütunları aynı şekilde işleyecektir: her parametre tablo değerli sütun sql_null_data, onun gerçek veri uzunluğunu belirtebilir veya veri yürütme yoluyla uzunluğu/göstergesi arabelleğini belirtebilirsiniz. Parametre tablo değerli sütun değerleri tekrar tekrar yapılan çağrılar tarafından geçirilebilir SQLPutDataher zamanki gibi bir karakter veya ikili değer olduğunda adet geçirilecek.

Tüm tablo değerli parametresi sütunları işlendi, sürücü daha fazla tablo değerli parametre veri satırlarını işlemek için tablo değerli parametresi için döner. Bu nedenle, yürütme sırasında veri tablosu valued parametreler için ilişkili parametrelerin her zamanki sıralı tarama sürücüyü izlemez. Bağlı tablo değerli bir parametre kadar yokladı SQLPutDataile denir StrLen_Or_IndPtrhangi zaman sürücü parametresi tablo değerli sütunları atlar ve sonraki gerçek saklı yordam parametresi hamle sıfıra eşit. Ne zaman SQLPutDatageçer bir göstergesi değeri büyüktür veya eşittir 1, sürücü parametresi tablo değerli sütunları işler ve tüm ilişkili satırlar ve sütunlar için değerleri edinceye kadar ardışık satırlar. Sonra sürücü için tablo değerli bir parametre döndürür. Tablo değerli parametresi belirteci alma arasında SQLParamDatave **SQLPutData(hstmt, NULL, n)**tablo değerli bir parametre için parametre tablo değerli kurucu sütun veri uygulama ayarlamanız ve gösterge tampon içeriğini sonraki satır veya satırların sunucuya aktarılır.

Bu senaryo için örnek kod yordamı içinde olduğunu demo_variable_TVP_bindingde Tablo Valued Parametreler (odbc) kullan.

Sistem Kataloğu'ndan tablo Valued parametre meta veri alma

Uygulama çağırdığında SQLProcedureColumnssql_ss_table ve type_name gibi tablo türü adı tablo değerli bir parametre için parametre tablo değerli parametreleri olan bir yordam için data_type döndürülür. İki ek sütunlar tarafından döndürülen sonuç kümesi eklenir SQLProcedureColumns: ss_type_catalog_name nerede tablo türü tablo değerli parametresi tanımlanmıştır ve ss_type_schema_name işlevi şema adı katalog adını döndürür nerede nerede tablo türü tablo değerli parametresi tanımlanmıştır. odbc belirtimi ile uyumluluk içinde görünür ss_type_catalog_name ve ss_type_schema_name önceki sürümlerinde eklenen tüm sürücü özgü sütunları önce SQL Serverve sonra tüm sütunları, kendisini odbc tarafından görevlendirilmiş.

Yeni sütunlar tablo değerli parametreler için sadece da clr türü kullanıcı tanımlı parametreleri için doldurulacaktır. Varolan şema ve Katalog sütun udt parametrelerinin hala doldurulur, ancak ortak şema ve Katalog sütunlar gerektiren veri türleri olan uygulama geliştirme gelecekte kolaylaştırır. (xml şema koleksiyonları biraz farklıdır ve bu değişikliği dahil değildir unutmayın.)

Bir uygulamanın kullandığı SQLTablestablo türü adlarının kalıcı tablolar, sistem tabloları ve görünümleri için yaptığı biçimde belirlemek için. Yeni tablo türü tablo türü tablo değerli parametreleri ile ilişkili tablo türlerini tanımlamak bir uygulamayı etkinleştirmek için tanıtıldı. Tablo türleri ve düzenli tabloları farklı ad alanları kullanın. Bu, hem tablo türü hem de gerçek bir tablo için aynı adı kullanabilirsiniz anlamına gelir. Ele almak sql_sopt_ss_name_scope, yeni bir deyimi özniteliği eklenmiştir. Bu özniteliği belirtir olup olmadığını SQLTablesve parametre tablo adı gerçek bir tablo adı veya tablo türü adı olarak yorumlamak gibi bir tablo adı almak başka Katalog işlevleri.

Bir uygulamanın kullandığı SQLColumnsbir tablonun sütunlarını belirleme türü yok ama mutlaka kalıcı tablolar için önce aynı şekilde o gerçek tablolar yerine tablo türleri ile çalıştığını göstermek için sql_sopt_ss_name_scope ayarlayın.. SQLPrimaryKeystekrar sql_sopt_ss_name_scope kullanarak tablo türleri ile de kullanılabilir.

Bu senaryo için örnek kod yordamı içinde olduğunu demo_metadata_from_catalog_APIsde Tablo Valued Parametreler (odbc) kullan.

Bir hazır deyimi için tablo Valued parametre meta veri alma

Bu senaryoda, bir uygulama kullanır SQLNumParametersve SQLDescribeParamtablo valued parametre meta verileri almak için.

IPD alan sql_ca_ss_type_name, tablo değerli parametre türü adı almak için kullanılır. sql_ca_ss_type_schema_name ve sql_ca_ss_type_catalog_name IPD alanları, sırasıyla şema ve Katalog almak için kullanılır.

Tablo türü tanımları ve tablo valued parametreler aynı veritabanı içinde olmalıdır. SQLSetDescFieldUygulama tablo değerli parametreleri kullanılırken sql_ca_ss_type_catalog_name ayarlarsa bir hata bildirir.

sql_ca_ss_type_catalog_name ve sql_ca_ss_type_schema_name Katalog ve clr türü kullanıcı tanımlı parametreleri ile ilgili şema almak için de kullanılabilir. sql_ca_ss_type_catalog_name ve sql_ca_ss_type_schema_name mevcut türü özel Katalog şema öznitelikleri clr udt türleri için alternatifler vardır.

Bir uygulamanın kullandığı SQLColumnsçünkü bu senaryoda da, tablo değerli bir parametre sütun meta verileri almak için SQLDescribeParamiçin parametre tablo değerli sütun ve sütun meta veri döndürmez.

Kullanma bu durumda örnek kodudur rutin demo_metadata_from_prepared_statementde Tablo Valued Parametreler (odbc) kullan.

Ayrıca bkz.

Kavramlar

Tablo Valued Parametreler (odbc)