Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, sürücünün go-mssqldb bilinen sınırlamalarını ve kısıtlamalarını listelemektedir.
LastInsertId desteklenmiyor
Sürücü go-mssqldb yöntemi database/sqlResult.LastInsertId() desteklemiyor. Çağırmak hata döner:
LastInsertId is not supported. Please use the OUTPUT clause or add
'select ID = convert(bigint, SCOPE_IDENTITY())' to the end of your query.
Çözüm: Bir OUTPUT cümle veya sorguda INSERT ayrı ayrı bir SCOPE_IDENTITY() madde kullanın.
Birden Fazla Aktif Sonuç Seti (MARS) desteklenmiyor
Sürücü MARS'ı desteklemiyor. Her bağlantıda aynı anda yalnızca bir aktif sorgu veya ifade bulunabilir. Eşzamanlı sorgular yapmanız gerekiyorsa, havuzdan ayrı bağlantılar kullanın.
Bağlantı havuzlama ile geçici tablo dürbünü
Geçici tablo davranışı SQL Server kapsam kurallarına uyar, ancak bağlantı havuzu bu davranışın uygulama kodunda nasıl göründüğünü değiştirir:
- Yerel geçici tablolar (
#name) tek oturuma (bağlantı) göre ayarlanır. - Küresel geçici tablolar (
##name) oluşturma oturumu açık kalırken diğer oturumlara görünür.
Ile database/sql, ayrı db.Exec ve db.Query çağrılar farklı havuzlu bağlantılar kullanabilir. Bir aramada oluşturulan yerel geçici tablo, sonraki çağrıda başka bir bağlantıda çalıştığında görünmez.
Küresel geçici tablolar için, bağlantılar arasında görünürlük beklendiği gibi çalışır, ancak yaşam döngüsü ve isimlendirme çarpışmaları eşzamanlı iş yüklerinde hâlâ özenle ilgilenilmelidir.
Rehberlik: İlgili işlemleri tek bir bağlantıya sabitlemek veya işlemleri bir işlemde sarmak için kullanılır db.Conn(ctx) . Küresel geçici tabloları yalnızca oturumlar arası görünürlük gerektiğinde kullanın.
Uygulama kalıpları için Geçici tablolar ve stored prosedürler, Bağlantı havuzu ve Geçici tablo bulunmadı bölümlerine bakınız.
Her Zaman Şifrelenmiş Kısıtlamalar
- Şifrelenmiş sütunlarla toplu kopyalama: Sürücü, her zaman şifrelenmiş sütunlu tablolarda toplu kopyalama işlemlerini desteklemez.
- Güvenli bölgeler: Sürücü, güvenli enclave'lerle Always Encrypted desteğini sağlamaz.
-
Sağlayıcı kaydı: Yan etki ithalatı olarak anahtar sağlayıcı paketini (
localcert,akv) içe aktarmalısınız. Onsuz sürücü verileri çözemez. -
Tam parametre tipi eşleştirme: Şifrelenmiş parametreler, SQL Server sütun tipiyle yakından eşleşmelidir. Varsayılan Go
stringolurnvarchar, bu da daha spesifik şifrelenmiş parametre türlerine karşı başarısız olabilir. -
Şifreli
charvevarcharmetin: Şifrelicharveyavarcharsütunlara yönelik ekleme ve güncellemeler şu anda sınırlıdır. Metin verisi için Always Encrypted gerektiğinde şifrelincharveyanvarcharsütunları tercih edin.
Eski SQL Server sürümleri ve TLS
Daha eski, destek olmayan SQL Server sürümleri TLS 1.2 veya daha sonrasını desteklemeyebilir. Bu sürümlere bağlandığında encrypt=true, sunucu uyumlu bir TLS sürümünü müzakere edemezse bağlantı arızalanabilir.
Çözüm: Desteklenen bir SQL Server sürümünü kullanın encrypt=false veya yükseltin.
Kullanımdan çıkmış mssql sürücü adı
Sürücü mssql adı (ile kullanılır sql.Open("mssql", ...)) artık kullanılmamıştır. Bunun yerine şunu kullanın sqlserver :
// Deprecated
db, err := sql.Open("mssql", connString)
// Recommended
db, err := sql.Open("sqlserver", connString)
Sürücü adı, mssql parametre belirteçlerinin değiştirilmesini gerçekleştirir, yer tutucuları ?, @p1, ve benzeri sıralı isimlere dönüştürür@p2. Sürücü adı, sqlserver açık adlandırılmış parametreler gerektirir ve daha öngörülebilir davranış sağlar.
Eğer bağlantı tabanlı sql.OpenDB kullanıma ihtiyacınız varsa ve eski sorgu-metni yeniden yazma davranışını geçici olarak korumanız gerekiyorsa, NewConnectorWithProcessQueryText. Yeni kod için sürücü adını ve açık parametreleri tercih edin sqlserver .
Uniqueidentifier sütunları
Sürücü, varsayılan olarak sütun değerlerini ham uniqueidentifier diziler olarak döndürür[]byte. Standart GUID formatlı dizileri almak için tarama hedefi olarak kullanın mssql.UniqueIdentifier .
ODBC uyumluluğu yok
Sürücü tamamen Go uygulamasıdır ve unixODBC, FreeTDS veya Microsoft ODBC Sürücüsü'nü kullanmaz veya bağımlı değildir. ODBC'ye özgü özellikler (DSN yapılandırması, ODBC izleme) mevcut değildir.
Adlandırılmış boru bağlantıları
Adlandırılmış boru bağlantıları, boru uç noktasında belirli dosya sistemi izinleri gerektirebilir. Linux'ta, SMB istemcisi isimli boru erişimi için yapılandırılmalıdır.
Yüzerlik hassasiyeti
Go'nun tipi float64 yaklaşık 15-16 anlamlı ondalık rakamlı içerir. SQL Server'lar decimal ve numeric tipleri 38 haneli hassasiyeti temsil edebilir.
decimal
/
numeric Sütunları tararken float64, 15'ten fazla anlamlı rakamlı değerler için hassasiyet kaybı meydana gelebilir.
Çözüm: Sütunları (decimal) veya/numeric () gibi üçüncü taraf ondalık kütüphanelerestringshopspring/decimal tarayın github.com/shopspring/decimalcockroachdb/apdgithub.com/cockroachdb/apd ve kesin aritmetik için kullanın. Desenler için bkz . Veri tipi eşlemeleri.