Parameter Perintah SQL Server Native Client

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

Parameter ditandai dalam teks perintah dengan karakter tanda tanya. Misalnya, pernyataan SQL berikut ditandai untuk parameter input tunggal:

{call SalesByCategory('Produce', ?)}  

Untuk meningkatkan performa dengan mengurangi lalu lintas jaringan, penyedia SQL Server Native Client OLE DB tidak secara otomatis memperoleh informasi parameter kecuali ICommandWithParameters::GetParameterInfo atau ICommandPrepare::P repare dipanggil sebelum menjalankan perintah. Ini berarti bahwa penyedia SQL Server Native Client OLE DB tidak secara otomatis:

  • Verifikasi kebenaran jenis data yang ditentukan dengan ICommandWithParameters::SetParameterInfo.

  • Peta dari DBTYPE yang ditentukan dalam informasi pengikatan aksesor ke jenis data SQL Server yang benar untuk parameter .

Aplikasi akan menerima kemungkinan kesalahan atau hilangnya presisi dengan salah satu metode ini jika menentukan jenis data yang tidak kompatibel dengan jenis data SQL Server parameter.

Untuk memastikan hal ini tidak terjadi, aplikasi harus:

  • Pastikan pwszDataSourceType cocok dengan jenis data SQL Server untuk parameter jika hard-coding ICommandWithParameters::SetParameterInfo.

  • Pastikan bahwa nilai DBTYPE yang terikat ke parameter memiliki jenis yang sama dengan jenis data SQL Server untuk parameter jika hard-coding aksesor.

  • Kode aplikasi untuk memanggil ICommandWithParameters::GetParameterInfo sehingga penyedia dapat memperoleh SQL Server jenis data parameter secara dinamis. Perhatikan bahwa ini menyebabkan perjalanan pulang pergi jaringan tambahan ke server.

Catatan

Penyedia tidak mendukung panggilan ICommandWithParameters::GetParameterInfo untuk setiap pernyataan UPDATE atau DELETE SQL Server yang berisi klausul FROM; untuk pernyataan SQL apa pun tergantung pada subkueri yang berisi parameter; untuk pernyataan SQL yang berisi penanda parameter dalam kedua ekspresi perbandingan, seperti, atau predikat terukur; atau kueri di mana salah satu parameter adalah parameter ke fungsi. Saat memproses batch pernyataan SQL, penyedia juga tidak mendukung panggilan ICommandWithParameters::GetParameterInfo untuk penanda parameter dalam pernyataan setelah pernyataan pertama dalam batch. Komentar (/* */) tidak diperbolehkan dalam perintah Transact-SQL.

Penyedia SQL Server Native Client OLE DB mendukung parameter input dalam perintah pernyataan SQL. Pada perintah panggilan prosedur, penyedia SQL Server Native Client OLE DB mendukung parameter input, output, dan input/output. Nilai parameter output dikembalikan ke aplikasi baik pada eksekusi (hanya jika tidak ada set baris yang dikembalikan) atau ketika semua set baris yang dikembalikan habis oleh aplikasi. Untuk memastikan bahwa nilai yang dikembalikan valid, gunakan IMultipleResults untuk memaksa konsumsi rowset.

Nama parameter prosedur tersimpan tidak perlu ditentukan dalam struktur DBPARAMBINDINFO. Gunakan NULL untuk nilai anggota pwszName untuk menunjukkan bahwa penyedia SQL Server Native Client OLE DB harus mengabaikan nama parameter dan hanya menggunakan ordinal yang ditentukan dalam anggota rgParamOrdinals dari ICommandWithParameters::SetParameterInfo. Jika teks perintah berisi parameter bernama dan tidak bernama, semua parameter yang tidak disebutkan namanya harus ditentukan sebelum parameter bernama.

Jika nama parameter prosedur tersimpan ditentukan, penyedia SQL Server Native Client OLE DB memeriksa nama untuk memastikan bahwa itu valid. Penyedia SQL Server Native Client OLE DB mengembalikan kesalahan ketika menerima nama parameter yang salah dari konsumen.

Catatan

Untuk mengekspos dukungan untuk SQL Server XML dan jenis yang ditentukan pengguna (UDT), penyedia SQL Server Native Client OLE DB mengimplementasikan antarmuka ISSCommandWithParameters baru.

Lihat juga

Perintah