Aracılığıyla paylaş


Bağlama ve verileri tablo değerli parametreler ve sütun değerleri Aktarım

Sunucuya aktarılır diğer parametreleri gibi tablo değerli parametreleri bağlı olması gerekir.Uygulama tablo değerli parametreleri tıpkı diğer parametreleri bağlayan bağlar: kullanarak SQLBindParameter veya eşdeğer aramalar için SQLSetDescField veya SQLSetDescRec.Sunucu verileri için tablo değerli bir parametre sql_ss_table türüdür.c türü sql_c_default veya SQL_C_BINARY olarak belirtilebilir.

De SQL Server 2008 veya daha sonra tablo deerli yalnızca giriş parametresi desteklenmemektedir.Bu nedenle, sql_desc_parameter_type SQL_PARAM_INPUT dışında bir değere küme girişimi SQL_ERROR hatası ile sqlstate döner HY105 ve "geçersiz parametre türü" ileti =.

Tüm tablo değerli parametresi sütunları atanabilir varsayılan değerleri kullanarak öznitelik sql_ca_ss_col_has_default_value.Tek tek parametre tablo değerli sütun değerleri, ancak alamazsınız atanmasını varsayılan değerleri de sql_default_param kullanarak StrLen_or_IndPtr ile SQLBindParameter.Bir bütün olarak tablo değerli parametreleri olamaz küme de sql_default_param kullanarak varsayılan bir değere StrLen_or_IndPtr ile SQLBindParameter.Bu kurallara uyulup, SQLExecute veya SQLExecDirect dönüş SQL_ERROR hatası.Tanılama kaydı sqlstate ile oluşturulacak 07S01 ve ileti = "parametresi için varsayılan parametrenin geçersiz kullanımı <p>", nerede <p> tvp sorgu deyim ordinal olduğu

Tablo değerli parametre bağlama sonra uygulama sonra her parametre tablo değerli sütun bağlamak gerekir.Bu uygulama ilk çağrı yapmak için SQLSetStmtAttr sql_sopt_ss_param_focus tablo değerli parametre ordinal için kümeSonra uygulama tablo değerli parametresi sütunları aşağıdaki yordamları çağrıları tarafından bağlar: SQLBindParameter, SQLSetDescRec, and SQLSetDescField.sql_sopt_ss_param_focus 0 geri yüklemeler için her zamanki etkisi ayarı SQLBindParameter, SQLSetDescRec, ve SQLSetDescField de işletim normal üst düzey parametreleri.

Hiçbir gerçek veri gönderildiğinde veya tablo değerli parametresi için kendisini aldı, ancak veri gönderilen ve alınan her biri kendi kendisini oluşturan sütunları için.Tablo değerli parametresi için parametreleri bir sözde sütun olduğundan SQLBindParameter diðer veri türlerinden farklı nitelikleri gibi başvurmak için kullanılır:

Parameter

İlgili öznitelik sütunları da dahil olmak üzere, non–tablo değerli parametre türleri

Tablo değerli parametreler için ilgili öznitelik

InputOutputType

IPD içinde sql_desc_parameter_type.

Tablo değerli parametresi sütunları için bu ayarı tablo değerli parametresi için kendisi ile aynı olması gerekir.

IPD içinde sql_desc_parameter_type.

Bu SQL_PARAM_INPUT olması gerekir.

ValueType

sql_desc_type, SQL_DESC_CONCISE_TYPE apd içinde.

sql_desc_type, SQL_DESC_CONCISE_TYPE apd içinde.

sql_c_default veya SQL_C_BINARY olması gerekir.

ParameterType

sql_desc_type, SQL_DESC_CONCISE_TYPE IPD içinde.

sql_desc_type, SQL_DESC_CONCISE_TYPE IPD içinde.

Bu, sql_ss_table olması gerekir.

ColumnSize

sql_desc_length veya SQL_DESC_PRECISION IPD içinde.

Bu durumunun değerine bağlı ParameterType.

SQL_DESC_ARRAY_SIZE

Ayrıca olarak küme sql_attr_param_ kullanarakkümeparametre odak olduğunda _SIZE küme tablo değerli parametresi için.

Tablo değerli bir parametre için parametre tablo değerli sütun arabellekleri satýr sayýsýný budur.

DecimalDigits

SQL_DESC_PRECISION veya sql_desc_scale IPD içinde.

Kullanılmayan.Bu 0 olmalıdır.

Bu parametre ise 0, SQLBindParameter SQL_ERROR hatası döndürür ve tanılama kaydı sqlstate ile oluşturulacak HY104 ve "geçersiz duyarlılık veya" ileti =.

ParameterValuePtr

sql_desc_data_ptr apd içinde.

SQL_CA_SS_TYPE_NAME.

Bu saklı yordam çağrıları için isteğe bağlı ve null olabilir gerekli değilse, belirtilen.Yordam çağrılarının olmayan sql deyimleri için belirtilmelidir.

Bu parametre, ayrıca, uygulama değişken satır bağlama kullanıldığında, bu tablo değerli parametre tanımlamak için kullanabileceğiniz benzersiz bir değer hizmet verir.Daha fazla bilgi için bkz: "değişken Table-Valued parametre satır bağlama" bölümünde, bu konunun ilerisinde.

Ne zaman bir tablo değerli parametre türü adı belirtilen yapılan çağrı sırasında SQLBindParameter, hatta olarak yerleşik uygulamalarında bir Unicode değeri olarak belirtilmelidirANSI uygulamaları. Parametre için kullanılan değeri StrLen_or_IndPtr olması gereken sql_nts veya dize uzunluğu adının çarpılarak sizeof(WCHAR).

BufferLength

sql_desc_octet_length apd içinde.

Tablo değerli parametre türü adı bayt cinsinden uzunluğu.

Tablo değerli parametre türü adı gerekli değildir, bu tür adı sonlandırıldı null olduğunda sql_nts veya 0 olabilir.

StrLen_or_IndPtr

sql_desc_octet_length_ptr apd içinde.

sql_desc_octet_length_ptr apd içinde.

Tablo değerli parametreler için veri uzunluğu yerine satır sayısı budur.

İki veri aktarım modlarını için tablo değerli parametreler desteklenir: Sabit satır bağlama ve değişken satır bağlama.

Sabit tablo değerli parametresi satır bağlama

Sabit satır bağlama için bir uygulama arabellekleri (veya arabellek dizi) ayırır yeterince büyük tüm olası giriş sütun değerleri için.Uygulama aşağıdakileri yapar:

  1. Tüm parametreleri kullanarak bağlar SQLBindParameter, SQLSetDescRec, veya SQLSetDescField çağrıları.

    1. SQL_DESC_ARRAY_SIZE her tablo değerli parametre için transfer edilebilir satır sayısı ayarlar.Bu yapılabilir SQLBindParameter çağrısı.
  2. Aramalar SQLSetStmtAttr için küme için her tablo değerli parametre. ordinal sql_sopt_ss_param_focus

    1. Her tablo değerli parametre için parametre tablo değerli sütun kullanarak bağlar SQLBindParameter, SQLSetDescRec, veya SQLSetDescField çağrıları.

    2. Varsayılan değerlere sahip olan her parametre tablo değerli sütun için çağırır SQLSetDescField için küme 1 sql_ca_ss_col_has_default_value.

  3. Aramalar SQLSetStmtAttr için küme sql_sopt_ss_param_focus 0.Bu önce yapılması gereken SQLExecute veya SQLExecDirect denir.Aksi takdirde, SQL_ERROR hatası döndürülmesi ve tanılama kaydı sqlstate ile oluşturulan HY024 ve ileti = "geçersiz öznitelik değeri, sql_sopt_ss_param_focus (yürütme sıfır olmalıdır saat)".

  4. Sets StrLen_or_IndPtr or SQL_DESC_OCTET_LENGTH_PTR to SQL_DEFAULT_PARAM for a table-valued parameter with no rows, or the number of rows to be transferred on the next call of SQLExecute or SQLExecDirect if the table-valued parameter has rows.StrLen_or_IndPtr or SQL_DESC_OCTET_LENGTH_PTR cannot be set to SQL_NULL_DATA for a table-valued parameter as table-valued parameters are not nullable (though table-valued parameter constituent columns may be nullable).Bu ise küme için geçersiz bir değer SQLExecute veya SQLExecDirect SQL_ERROR hatası ve tanılama kaydı sqlstate ile oluşturulan döndürür HY090 ve ileti = "parametresi için geçersiz dize veya arabellek uzunluğu <p>", p parametre numarası. burada

  5. Calls SQLExecute or SQLExecDirect.

Parametre tablo değerli sütun değerleri geçen parçalar halinde, giriş StrLen_or_IndPtr olan küme için sql_len_data_at_exec (length) veya sütun. sql_data_at_execBu parametre dizileri kullanıldığında değerleri parçalar halinde geçirilmesi için benzer.Tüm yürütme sırasında veri parametreleri gibi ile SQLParamData sürücü için; veri isteyen dizinin hangi satır gösterir uygulama bu karşılamaya gerekir.Sürücü değerleri ister sipariş durumuyla ilgili uygulama yapamazsınız.

Değişken tablo değerli parametresi satır bağlama

Toplu yürütme sırasında aktarılan değişken satır bağlama için satır saat ve uygulama isteğe bağlı satır sürücüsüne geçirir.Bu veri-sırasındaki-tek tek parametre değerleri için benzer.Uygulama değişken satır bağlama için şunları yapar:

  1. Parametreleri ve tablo değerli parametresi sütunları önceki bölüm olan "Sabit Table-Valued parametre satır bağlama" 1-3 adımda açıklandığı gibi bağlar.

  2. Kümeleri StrLen_or_IndPtr veya yürütme sırasında katılacağını tablo değerli parametreler için sql_desc_octet_length_ptr saat sql_data_at_exec.Ne ise küme, parametre önceki bölümde açıklandığı şekilde işlenebilir.

  3. Calls SQLExecute or SQLExecDirect.Tüm SQL_PARAM_INPUT veya SQL_PARAM_INPUT_OUTPUT parametrelerin parametre olarak veri-sırasındaki-ele sahipse bu sql_need_data döndürür.Bu durum, uygulama şunları yapar:

    • Calls SQLParamData.Bu sayı ParameterValuePtr değeri için yürütme sırasında veri parametresi ve dönüş kodunu sql_need_data.Tüm parametre veri geçirilen zaman sürücü için SQLParamData verir sql_success, SQL_SUCCESS_WITH_INFO veya SQL_ERROR hatası.Yürütme sırasında veri parametreleri için ParameterValuePtr, sql_desc_data_ptr alan tanımlayıcısı ile aynı olduğu, bir parametre için bir değer olduğu gerekli benzersiz olarak tanımlamak için bir belirteç kabul.Bu "token" uygulamadan sonra geri uygulamanın yürütülmesi sırasında aktarılan sürücü bağlama saat geçirilir.
  4. Tablo değerli parametresi satır yok ise null tablo değerli parametreler için parametre tablo değerli satır veri göndermek için bir uygulama çağırır ve bu SQLPutData ile StrLen_or_Ind küme sql_default_param.

    Olmayan - null TVPs için bir uygulama:

    • Kümeleri Str_Len_or_Ind için uygun değerleri için tüm tablo değerli parametresi sütunları ve yürütme sırasında veri parametreleri. edilmeyeceğini tablo değerli parametresi sütunları için veri arabelleğini doldururYürütme sırasında veri tablo değerli parametresi sütunları için benzer şekilde kullanabileceğiniz o içinde sıradan geçilen parametreler sürücü parça içinde.

    • Aramalar SQLPutData ile Str_Len_or_Ind gönderilmesine izin satır sayısını kümeserver. SQL_DESC_ARRAY_SIZE veya sql_default_param aralık 0 dışında herhangi bir değer bir hatadır ve sqlstate HY090 "Geçersiz dize veya arabellek uzunluğu" iletisi ile döner.tüm satırları gönderilip gönderilmediğini ve (Bu listede ikinci öğe öğe de belirtildiği gibi) daha fazla veri yok tablo değerli bir parametre için 0 gösterir.sql_default_param yalnızca kullanılabilir ilk saat (Bu listedeki ilk öğe öğesi açıklandığı gibi) veri tablo değerli bir parametre için sürücü ister.

  5. Tüm satırlar gönderilen zaman arar SQLPutData tablo değerli parametresi için bir Str_Len_or_Ind değeri 0, sonra adım adım 3a yukarıdaki hasılatını.

  6. Aramalar SQLParamData yeniden.Yürütme sırasında veri parametreleri tablo değerli parametresi sütunları arasında varsa, bu değeri tarafından tanımlanacak ValuePtrPtr tarafından döndürülen SQLParamData.Tüm sütun değerleri kullanılabilir olduğunda SQLParamData tekrar geri döner ParameterValuePtr değeri tablo değerli parametre ve uygulamanın yeniden başlar.

Ayrıca bkz.

Kavramlar