SQLDescribeParam

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Untuk menjelaskan parameter pernyataan SQL apa pun, driver ODBC SQL Server Native Client membangun dan menjalankan pernyataan Transact-SQL SELECT ketika SQLDescribeParam dipanggil pada handel pernyataan ODBC yang disiapkan. Metadata kumpulan hasil menentukan karakteristik parameter dalam pernyataan yang disiapkan. SQLDescribeParam dapat mengembalikan kode kesalahan apa pun yang mungkin dikembalikan oleh SQLExecute atau SQLExecDirect.

Peningkatan di mesin database yang dimulai dengan SQL Server 2012 (11.x) memungkinkan SQLDescribeParam untuk mendapatkan deskripsi yang lebih akurat dari hasil yang diharapkan. Hasil yang lebih akurat ini mungkin berbeda dari nilai yang dikembalikan oleh SQLDescribeParam di versi SQL Server sebelumnya. Untuk informasi selengkapnya, lihat Penemuan Metadata.

Juga baru di SQL Server 2012 (11.x), ParameterSizePtr sekarang mengembalikan nilai yang selaras dengan definisi untuk ukuran, dalam karakter, kolom atau ekspresi penanda parameter yang sesuai seperti yang didefinisikan dalam spesifikasi ODBC. Dalam versi SQL Server Native Client sebelumnya, ParameterSizePtr bisa menjadi nilai SQL_DESC_OCTET_LENGTH yang sesuai untuk jenis tersebut, atau nilai ukuran kolom yang tidak relevan yang disediakan ke SQLBindParameter untuk jenis, yang nilainya harus diabaikan (SQL_INTEGER, misalnya).

Driver tidak mendukung panggilan SQLDescribeParam dalam situasi berikut:

  • Setelah SQLExecDirect untuk setiap pernyataan TRANSACT-SQL UPDATE atau DELETE yang berisi klausa FROM.

  • Untuk pernyataan ODBC atau Transact-SQL apa pun yang berisi parameter dalam klausa HAVING, atau dibandingkan dengan hasil fungsi SUM.

  • Untuk pernyataan ODBC atau Transact-SQL apa pun tergantung pada subkueri yang berisi parameter.

  • Untuk pernyataan ODBC SQL yang berisi penanda parameter dalam kedua ekspresi perbandingan, seperti, atau predikat terukur.

  • Untuk kueri apa pun di mana salah satu parameter adalah parameter untuk fungsi.

  • Ketika ada komentar (/* */) dalam perintah Transact-SQL.

Saat memproses batch pernyataan Transact-SQL, driver juga tidak mendukung panggilan SQLDescribeParam untuk penanda parameter dalam pernyataan setelah pernyataan pertama dalam batch.

Saat menjelaskan parameter prosedur tersimpan yang disiapkan, SQLDescribeParam menggunakan prosedur tersimpan sistem sp_sproc_columns untuk mengambil karakteristik parameter. sp_sproc_columns dapat melaporkan data untuk prosedur tersimpan dalam database pengguna saat ini. Menyiapkan nama prosedur tersimpan yang sepenuhnya memenuhi syarat memungkinkan SQLDescribeParam untuk dijalankan di seluruh database. Misalnya, prosedur tersimpan sistem sp_who dapat disiapkan dan dijalankan dalam database apa pun sebagai:

SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);  

Menjalankan SQLDescribeParam setelah persiapan berhasil mengembalikan baris kosong yang ditetapkan saat tersambung ke database apa pun tetapi master. Panggilan yang sama, disiapkan sebagai berikut, menyebabkan SQLDescribeParam berhasil terlepas dari database pengguna saat ini:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);  

Untuk jenis data nilai besar, nilai yang dikembalikan dalam DataTypePtr SQL_VARCHAR, SQL_VARBINARY, atau SQL_NVARCHAR. Untuk menunjukkan bahwa ukuran parameter jenis data nilai besar "tidak terbatas," driver ODBC SQL Server Native Client mengatur ParameterSizePtr ke 0. Nilai ukuran aktual dikembalikan untuk parameter varchar standar.

Catatan

Jika parameter telah terikat dengan ukuran maksimum untuk parameter SQL_VARCHAR, SQL_VARBINARY, atau SQL_WVARCHAR, ukuran terikat parameter dikembalikan, bukan "tidak terbatas."

Untuk mengikat parameter input ukuran "tidak terbatas", eksekusi data harus digunakan. Tidak dimungkinkan untuk mengikat parameter output ukuran "tidak terbatas" (tidak ada metode untuk streaming data dari parameter output, seperti yang dilakukan SQLGetData untuk kumpulan hasil).

Untuk parameter output, buffer harus terikat dan jika nilainya terlalu besar, buffer diisi dan pesan SQL_SUCCESS_WITH_INFO dan dikembalikan bersama dengan "data string; peringatan pemotongan kanan". Data yang dipotong kemudian dibuang.

Parameter SQLDescribeParam dan Table-Valued

Aplikasi dapat mengambil informasi parameter bernilai tabel untuk pernyataan yang disiapkan dengan SQLDescribeParam. Untuk informasi selengkapnya, lihat Metadata Parameter Bernilai Tabel untuk Pernyataan yang Disiapkan.

Untuk informasi selengkapnya tentang parameter bernilai tabel secara umum, lihat Parameter Bernilai Tabel (ODBC).

Dukungan SQLDescribeParam untuk Fitur Tanggal dan Waktu yang Ditingkatkan

Nilai yang dikembalikan untuk jenis tanggal/waktu adalah sebagai berikut:

Atribut DataTypePtr ParameterSizePtr DecimalDigitsPtr
datetime SQL_TYPE_TIMESTAMP 23 3
smalldatetime SQL_TYPE_TIMESTAMP 16 0
date SQL_TYPE_DATE 10 0
waktu SQL_SS_TIME2 8, 10..16 0..7
tanggalwaktu2 SQL_TYPE_TIMESTAMP 19, 21..27 0..7
tanggalwaktulewat SQL_SS_TIMESTAMPOFFSET 26, 28..34 0..7

Untuk informasi selengkapnya, lihat Peningkatan Tanggal dan Waktu (ODBC).

Dukungan SQLDescribeParam untuk UDT CLR Besar

SQLDescribeParam mendukung jenis yang ditentukan pengguna (UDT) CLR besar. Untuk informasi selengkapnya, lihat Jenis Yang Ditentukan Pengguna (ODBC) CLR Besar.

Lihat Juga

Fungsi SQLDescribeParam
Detail Implementasi ODBC API