Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini mencantumkan batasan dan batasan go-mssqldb driver yang diketahui.
LastInsertId tidak didukung
go-mssqldb Driver tidak mendukung metode tersebutdatabase/sqlResult.LastInsertId(). Memanggilnya akan menampilkan kesalahan:
LastInsertId is not supported. Please use the OUTPUT clause or add
'select ID = convert(bigint, SCOPE_IDENTITY())' to the end of your query.
Solusi: Gunakan OUTPUT klausa dalam INSERT pernyataan atau kueri SCOPE_IDENTITY() secara terpisah.
Beberapa Set Hasil Aktif (MARS) tidak didukung
Driver tidak mendukung MARS. Setiap koneksi hanya dapat memiliki satu kueri atau pernyataan aktif pada satu waktu. Jika Anda perlu menjalankan kueri bersamaan, gunakan koneksi terpisah dari kumpulan.
Cakupan tabel sementara dengan pengumpulan koneksi
Perilaku tabel sementara mengikuti aturan cakupan SQL Server, tetapi pengumpulan koneksi mengubah bagaimana perilaku tersebut muncul dalam kode aplikasi:
- Tabel sementara lokal (
#name) dilingkupi ke satu sesi (koneksi). - Tabel sementara global (
##name) terlihat oleh sesi lain saat sesi pembuatan tetap terbuka.
database/sqlDengan , terpisah db.Exec dan db.Query panggilan mungkin menggunakan koneksi gabungan yang berbeda. Tabel sementara lokal yang dibuat dalam satu panggilan tidak terlihat di panggilan berikutnya saat panggilan berikutnya berjalan pada koneksi yang berbeda.
Untuk tabel sementara global, visibilitas di seluruh koneksi berfungsi seperti yang diharapkan, tetapi siklus hidup dan tabrakan penamaan masih memerlukan perhatian dalam beban kerja bersamaan.
Panduan: Gunakan db.Conn(ctx) untuk menyematkan operasi terkait ke satu koneksi, atau membungkus operasi dalam transaksi. Gunakan tabel sementara global hanya jika visibilitas lintas sesi diperlukan.
Untuk pola implementasi, lihat Tabel sementara dan prosedur tersimpan, Pengumpulan koneksi, dan Tabel sementara tidak ditemukan.
Batasan Selalu Terenkripsi
- Salinan massal dengan kolom terenkripsi: Driver tidak mendukung operasi penyalinan massal pada tabel dengan kolom Selalu Terenkripsi.
- Kantong aman: Driver tidak mendukung Selalu Dienkripsi dengan enklave aman.
-
Pendaftaran penyedia: Anda harus mengimpor paket penyedia kunci (
localcert,akv) sebagai impor efek samping. Tanpa itu, driver tidak dapat mendekripsi data. -
Pencocokan jenis parameter yang tepat: Parameter terenkripsi harus sangat cocok dengan jenis kolom SQL Server. Go default
stringmenjadinvarchar, yang dapat gagal terhadap jenis parameter terenkripsi yang lebih spesifik. -
Terenkripsi
chardanvarcharteks: Sisipan dan pembaruan terhadap kolom terenkripsicharatauvarcharsaat ini dibatasi. Lebih suka terenkripsincharataunvarcharkolom saat Anda memerlukan Selalu Terenkripsi untuk data teks.
Versi SQL Server dan TLS yang lebih lama
Versi SQL Server yang lebih lama dan tidak didukung mungkin tidak mendukung TLS 1.2 atau yang lebih baru. Saat menyambungkan ke versi ini dengan encrypt=true, koneksi mungkin gagal jika server tidak dapat menegosiasikan versi TLS yang kompatibel.
Solusi: Gunakan encrypt=false atau tingkatkan ke versi SQL Server yang didukung.
Nama driver mssql yang tidak digunakan lagi
Nama mssql driver (digunakan dengan sql.Open("mssql", ...)) tidak digunakan lagi. Gunakan sqlserver sebagai gantinya:
// Deprecated
db, err := sql.Open("mssql", connString)
// Recommended
db, err := sql.Open("sqlserver", connString)
Nama mssql driver melakukan penggantian token parameter, mengonversi ? placeholder menjadi @p1, @p2, dan nama ordinal serupa.
sqlserver Nama driver memerlukan parameter bernama eksplisit dan memberikan perilaku yang lebih dapat diprediksi.
Jika Anda memerlukan penggunaan berbasis sql.OpenDB konektor dan harus mempertahankan perilaku penulisan ulang teks kueri lama untuk sementara, gunakan NewConnectorWithProcessQueryText. Untuk kode baru, pilih sqlserver nama driver dan parameter eksplisit.
Kolom UniqueIdentifier
Driver mengembalikan uniqueidentifier nilai kolom sebagai array mentah []byte secara default. Gunakan mssql.UniqueIdentifier sebagai tujuan pemindaian untuk mendapatkan string berformat GUID standar.
Tidak ada kompatibilitas ODBC
Driver adalah implementasi Go murni dan tidak menggunakan atau bergantung pada unixODBC, FreeTDS, atau Microsoft ODBC Driver. Fitur khusus ODBC (konfigurasi DSN, pelacakan ODBC) tidak tersedia.
Sambungan pipa bernama
Koneksi pipa bernama mungkin memerlukan izin sistem file tertentu pada titik akhir pipa. Di Linux, klien SMB harus dikonfigurasi untuk akses pipa bernama.
Presisi mengambang
Tipe Go float64 menyediakan sekitar 15-16 digit desimal yang signifikan. SQL Server decimal dan numeric jenis dapat mewakili hingga 38 digit presisi. Saat memindai decimal/numerickolom ke float64, kehilangan presisi dapat terjadi untuk nilai dengan lebih dari 15 digit signifikan.
Solusi: Pindai decimal/numeric kolom ke dalam string dan gunakan pustaka desimal pihak ketiga seperti shopspring/decimal (github.com/shopspring/decimal) atau cockroachdb/apd (github.com/cockroachdb/apd) untuk aritmatika yang tepat. Untuk pola, lihat Pemetaan tipe data.