SET NOCOUNT ile ilgili farklı görüşlerin olduğu bu sorudan esinlenilmiştir ...
SQL Server için SET NOCOUNT ON kullanmalı mıyız? Değilse, neden olmasın?
Ne yapar Düzenle 6, üzerinde 22 Tem 2011
Herhangi bir DML'den sonra "etkilenen xx satırları" iletisini bastırır. Bu bir sonuç kümesidir ve gönderildiğinde istemci bunu işlemelidir. Küçük ama ölçülebilir (aşağıdaki yanıtlara bakın)
Tetikleyiciler vb. İçin, istemci birden çok "etkilenen xx satırı" alır ve bu bazı ORM'ler, MS Access, JPA vb. İçin her türlü hataya neden olur (aşağıdaki düzenlemelere bakın)
Arka fon:
Genel kabul edilen en iyi uygulama (bu soruya kadar düşündüm) SET NOCOUNT ON
SQL Server'da tetikleyiciler ve saklı yordamlarda kullanmaktır . Biz her yerde kullanmak ve hızlı bir google da kabul SQL Server MVP bol gösterir.
MSDN, bunun bir .net SQLDataAdapter bozabileceğini söylüyor .
Şimdi, bu benim için SQLDataAdapter tamamen basitçe CRUD işleme ile sınırlı olduğu için "etkilenen n satır" mesajı eşleşmesini bekliyor anlamına gelir. Bu yüzden kullanamıyorum:
- Yinelemeleri önlemek için VARSA (etkilenen satır yok mesajı) Not: dikkatli kullanın
- NEREDE VAR YOK (beklenenden daha az satır
- Önemsiz güncellemeleri filtreleyin (örn. Gerçekte hiçbir veri değişmez)
- Daha önce herhangi bir tablo erişimi yapın (günlük kaydı gibi)
- Karmaşıklığı veya denormlizasyonu gizle
- vb
Soruda (SQL öğelerini bilen) marc_s bunu kullanmadığını söylüyor. Bu düşündüğümden farklı (ve kendimi SQL'de de yetkin görüyorum).
Bir şey eksik olabilirim (bariz olanı belirtmekte özgürsün), ama orada ne düşünüyorsun?
Not: Bugünlerde SQLDataAdapter kullanmıyorum çünkü bu hatayı gördüm beri yıl oldu.
Yorum ve sorulardan sonraki düzenlemeler:
Düzenleme: Daha fazla düşünce ...
Birden çok istemcimiz var: biri C # SQLDataAdaptor kullanabilir, diğeri Java'dan nHibernate kullanabilir. Bunlar ile farklı şekillerde etkilenebilir SET NOCOUNT ON
.
Depolanmış proc'ları yöntem olarak görüyorsanız, bazı dahili işlemlerin kendi amaçlarınız için belirli bir şekilde çalıştığını varsaymak kötü bir formdur (anti-desen).
Düzenleme 2: nHibernate soru kırma tetik , nerede SET NOCOUNT ON
kümesi olamaz
(ve hayır, birinin kopyası değil bu )
Edit 3: MVP meslektaşım sayesinde daha fazla bilgi
- KB 240882 , SQL 2000 ve önceki sürümlerde bağlantı kesilmesine neden olan sorun
- Performans kazancı demosu
Düzenleme 4: 13 Mayıs 2011
Belirtilmediğinde Linq 2 SQL'i de kırıyor mu?
Düzenle 5: 14 Haz 2011
JPA, depolanmış proc'u tablo değişkenleriyle sonlandırır : JPA 2.0 SQL Server tablo değişkenlerini destekliyor mu?
Düzenle 6: 15 Ağu 2011
SSMS "Satırları düzenle" veri ızgarası için SET NOCOUNT ON: GROUP BY ile güncelleme tetiği
Düzenle 7: 07 Mar 2013
@RemusRusanu'dan daha ayrıntılı bilgi:
SET NOCOUNT ON gerçekten bir performans farkı yaratıyor mu?