Aracılığıyla paylaş


Bağlama ve verileri tablo biçiminde, Parametreler ve sütun değerleri Aktarım

Sunucuya geçilen parametreler tablo değerli gibi diğer parametreleri bağlı olması gerekir.Uygulama parametreleri tablo değerli aynı şekilde, diğer parametreleri bağlar bağlar: kullanarakSQLBindParameter veya eşdeğer bir çağrı SQLSetDescField veya SQLSetDescRec. Sunucu veri tablo değerli bir parametre için SQL_SS_TABLE türdür.C türü SQL_C_DEFAULT veya SQL_C_BINARY olarak belirtilebilir.

Içinde SQL Server 2008, yalnızca giriş tablo değerli parametreleri desteklenir. Bu nedenle, SQLSTATE ile SQL_ERROR SQL_DESC_PARAMETER_TYPE SQL_PARAM_INPUT dışında bir değere küme girişimi döndürecektir = HY105 ve "geçersiz parametre türü" iletisi.

Tüm tablo değerli parametre sütunları SQL_CA_SS_COL_HAS_DEFAULT_VALUE özniteliğini kullanarak varsayılan değerler atanabilir.Tek tek tablo değerli parametre sütun değerlerini, ancak varsayılan değerleri de SQL_DEFAULT_PARAM kullanarak atanamaz StrLen_or_IndPtr With SQLBindParameter. Bir bütün olarak tablo değerli parametreleri olamaz küme SQL_DEFAULT_PARAM, Ek Yardım düğmesini kullanarak bir varsayılan değer StrLen_or_IndPtr With SQLBindParameter. Bu kurallar, gelir değil SQLExecute veya SQLExecDirect SQL_ERROR döndürecektir. SQLSTATE ile oluşturulan BIR tanılama kayıt 07S01 ve "geçersiz kullanımı varsayılan parametre için parametre ileti = <p>", burada <p> sıra, bir sorgu ifadesinde TVP olur.

Tablo değerli parametre bağlama sonra uygulama daha sonra her tablo değerli parametre sütun bağlama gerekir.Bunu yapmak için , uygulama çağırır SQLSetStmtAttr tablo değerli bir parametre sıra sayısı için SQL_SOPT_SS_PARAM_FOCUS ayarlamak için . Daha sonra uygulama tarafından aşağıdaki yordamlarına yapılan çağrıların sütunlar tablo değerli parametresinin bağlar: SQLBindParameter, SQLSetDescRec, ve SQLSetDescField. SQL_SOPT_SS_PARAM_FOCUS normal etkisini 0 geri yüklemeler için ayarlama SQLBindParameter, SQLSetDescRec, ve SQLSetDescField en üst düzey parametreleri normal işletim içinde.

Gerçek veri gönderildiğinde veya tablo değerli parametre için kendisini aldı, ancak verinin gönderilme ve her kendisini oluşturan sütunlarından alınan.Tablo değerli parametre parametrelerini bir sözde sütun olduğundan SQLBindParameter Diğer veri türlerinden farklı öznitelikleri gibi başvurmak için kullanılır:

Parameter

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

Ilgili tablo değerli parametreleri özniteliği

InputOutputType

SQL_DESC_PARAMETER_TYPE IPD içinde.

Sütunlar tablo değerli bir parametre için bu tablo değerli parametresi için kendisini ayarı ile aynı olması gerekir.

SQL_DESC_PARAMETER_TYPE IPD içinde.

Bu işlem, SQL_PARAM_INPUT olmalıdır.

ValueType

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE APD içinde.

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE APD içinde.

Bu, SQL_C_DEFAULT veya SQL_C_BINARY olmalıdır.

ParameterType

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE IPD içinde.

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE IPD içinde.

Bu işlem, SQL_SS_TABLE olmalıdır.

ColumnSize

SQL_DESC_LENGTH veya SQL_DESC_PRECISION IPD içinde.

Bu değeri temel bağlıdır. ParameterType.

sql_desc_array_size

Ayrıca olabilir küme parametre odaklanmış durumdayken SQL_ATTR_PARAM_küme_SIZE kullanarak küme tablo değerli parametresi için.

Tablo değerli bir parametre için bu parametre tablo değerli sütun arabelleklerindeki satır sayısıdır.

DecimalDigits

SQL_DESC_PRECISION veya SQL_DESC_SCALE IPD içinde.

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

Bu parametre değilse, 0, SQLBindParameterSQL_ERROR döndürecektir ve Tanılama kayıt SQLSTATE ile oluşturulan = HY104 ve "geçersiz duyarlık veya ölçek".

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ıdır ve null olabilir gerekli olmadığı zaman, belirtildi.Yordam çağrılarının olmayan SQL deyimlerini belirtilmeli.

Bu parametre, 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 da işlev görür.Daha fazla bilgi için bkz: "Değişken tablo-Valued Parameter satır bağlama" bölümünde, bu konunun ilerleyen bölümlerindeki.

Tablo değerli bir parametre türü adı bir çağrı zaman belirtilmiştir SQLBindParameter, ANSI uygulamaları yerleşik olarak bulunan uygulamalarda için bile bir Unicode değeri olarak belirtilmelidir. Parametre için kullanılan değer StrLen_or_IndPtr SQL_NTS ya da dize uzunluğu sizeof(WCHAR) ile çarpılan bir adı olması gerekir.

BufferLength

SQL_DESC_OCTET_LENGTH APD içinde.

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

Tablo değerli bir parametre türü adı gerekli değilse, bu tür adı sonlandırıldı boşsa 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 bir veri uzunluğu yerine bir satır sayımından budur.

Iki 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.

Tablo biçiminde Parameter satır bağlama sabit

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

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

    1. SQL_DESC_ARRAY_SIZE tablo değerli her parametre için transfer edilebilir satır sayısı ayarlar.Bu işlem yapılabilir SQLBindParameter Çağrı.
  2. Aramalar SQLSetStmtAttr küme için tablo değerli parametresinin her sıra için SQL_SOPT_SS_PARAM_FOCUS.

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

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

  3. Aramalar SQLSetStmtAttr küme 0 için SQL_SOPT_SS_PARAM_FOCUS. Bu, önce gerçekleştirilmelidir SQLExecute veya SQLExecDirect denir. Tersi durumda, SQL_ERROR döndürülür ve Tanılama kayıt SQLSTATE ile oluşturulan = HY024 ve "geçersiz bir öznitelik değeri, (yürütülmesi sırasında sıfır olmalıdır) SQL_SOPT_SS_PARAM_FOCUS" iletisi.

  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 geçersiz bir değere ayarlanmışsa SQLExecute veya SQLExecDirectSQL_ERROR ve Tanılama kayıt SQLSTATE ile oluşturulan döndürür HY090 ve "Geçersiz dize veya arabellek uzunluğu parametresinin ileti = <p>", burada p parametresi sayıdır.

  5. Aramalar SQLExecute veya SQLExecDirect.

Tablo değerli giriş parametresi sütun değerlerini, parçalar halinde geçirilebilir StrLen_or_IndPtr SQL_LEN_DATA_AT_EXEC (için kümelength) veya sütun için SQL_DATA_AT_EXEC. Parametre dizileri kullanıldığında, değerleri parçalar halinde geçirilmesi için benzer.Gibi tüm yürütme sırasında veri parametreleri SQLParamData hangi satır belirtmek için veri isteyen bir dizi sürücü; uygulama bu karşılamaya gerekir. Uygulamanın, sürücünün değerleri ister sipariş durumuyla ilgili yapılamıyor.

Değişken tablo biçiminde Parameter satır bağlama

Değişken satır bağlama için satır toplu yürütme sırasında aktarılır saat ve uygulama isteğe bağlı satır sürücüye aktarır.Bu veri adresinde yürütme tek tek parametre değerleri için benzer.Değişken satır bağlama için uygulama aşağıdakileri yapar:

  1. Parametreler ve bir önceki bölüme "Sabit Table-Valued Parameter satır bağlama" 1-3 adımlarda tanımlanan tablo değerli parametre sütunları bağlar.

  2. Kümeleri StrLen_or_IndPtr veya SQL_DESC_OCTET_LENGTH_PTR SQL_DATA_AT_EXEC için yürütme saat geçirilecek olan tablo değerli parametreleri. Hiçbiri, küme, parametre önceki bölümde açıklandığı şekilde işlenir.

  3. Aramalar SQLExecute veya SQLExecDirect. Herhangi bir SQL_PARAM_INPUT veya olarak veri-en-yürütme parametreleri SQL_PARAM_INPUT_OUTPUT parametrelerin işlenme yoksa bu SQL_NEED_DATA döndürecektir.Bu durumda, uygulama aşağıdakileri yapar:

    • Aramalar SQLParamData. Bu işlevi ParameterValuePtr Yürütme sırasında veri parametre ile bir dönüş kodu SQL_NEED_DATA değeri. Ne zaman tüm parametre verilerini geçirildi, sürücüye SQLParamData SQL_SUCCESS, SQL_SUCCESS_WITH_INFO veya SQL_ERROR döndürür. Yürütme sırasında veri parametrelerini ParameterValuePtr, tanımlayıcısını ile aynı olduğu SQL_DESC_DATA_PTR alan, bir değer gerekli olduğu bir parametre benzersiz olarak tanıtan bir simge görülebilir. Bu "belirteç" bağlaması saat sürücüsüne uygulamadan geçirilen sonra yürütülmesi sırasında uygulamaya geçirildi.
  4. Tablo değerli parametresi, hiçbir satır varsa, tablo değerli null parametreler için parametre tablo değerli satır veri göndermek için , bir uygulama çağırır. SQLPutData With StrLen_or_Ind küme SQL_DEFAULT_PARAM için.

    Non-NULL TVPs için bir uygulama:

    • Kümeleri Str_Len_or_Ind uygun değerleri için tüm tablo değerli parametre sütunlarda ve yürütme sırasında veri parametreleri olacak tablo değerli parametre sütunların veri arabellekleri doldurur. Yürütme sırasında veri tablo değerli parametre sütunlar için benzer şekilde kullanabilirsiniz, sıradan parametreleri, sürücüdeki parçaları için geçirilebilir.

    • Aramalar SQLPutData With Str_Len_or_Ind satır sayısı, sunucuya gönderilmek üzere ayarlayın. Herhangi bir değer aralık 0 SQL_DESC_ARRAY_SIZE veya SQL_DEFAULT_PARAM dışında bir hatadır ve SQLSTATE HY090, "Dize veya arabellek uzunluğu geçersiz" iletisi ile döndürecektir.0, tüm satırlar için gönderildi ve bu listedeki ikinci öğe işareti öğesinde (belirtildiği gibi) daha fazla veri tablo değerli bir parametre yok gösterir.SQL_DEFAULT_PARAM yalnızca sürücü tablo değerli bir parametre için verileri (Bu listedeki ilk öğe işareti öğesinde açıklandığı gibi) istekleri ilk kez kullanılır.

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

  6. Aramalar SQLParamData yeniden. Tablo değerli parametre sütunlar arasında herhangi bir yürütme sırasında veri parametre varsa, bu değeri tarafından tanımlanacak ValuePtrPtr tarafından döndürüldü. SQLParamData. Tüm sütun değerleri, olduğunda SQLParamData yeniden döndürecektir ParameterValuePtr Uygulama ve tablo değerli parametresi için değer yeniden başlar.