2011-06-08 19 views
5

Geri dönmek veya etkilemek için kayıt sayısını ayarlamak için RowCount sahibiz. Ancak, her seferinde SQL deyimini çalıştırmadan önce bunu ayarlamamız gerekiyor. Uygulamam başladığında bunu ayarlamanın bir yolunu arıyorum ve bu yüzden uygulamam aracılığıyla tüm sorguları çalıştırıyorum.SQL Server: Dönülecek maksimum kayıt sayısı

Güncelleme ı sınırlı kayıtları ile bir deneme sürümü stratejisi ulaşmak istiyoruz

! Gerçek kodumla uğraşmak istemiyorum ve bir şekilde herhangi bir sorgu sonucunda veritabanı sayısının sınırlı bir şekilde geri getirilmesini istemiyorum! Bir alternatif, her bir mağaza prosedürüne bir parametre iletebilirdi ancak bunu gerçekten sevmiyorum ve başka bir strateji arıyorum!

+2

şimdi sen neden olur Bunu yapmak ister misin? –

+0

Uygulamamı belirli modda belirli sayıda kayıt almak için kısıtlamak istiyorum ... – mqpasta

+1

Tehlikeli geliyor - 6 ay sonra satırda, uygulamada ilgisiz bir değişiklik yapıyorsunuz, aniden 25 satırı güncellemek istiyor . Ancak, başka bir yerde, 20'lik bir uygulama sınırı belirlediniz ve şimdi aniden 5 satır güncellenmiyor, ancak hiçbir hata iletisi görünmüyor. 6 ay sonra, bazı güncellemelerin neden doğru çalışmıyor gibi göründüğünü araştırmaya başlıyorsunuz ... –

cevap

2

bakın, bu yüzden size kodu veremem, ama bir veritabanı için bir sarıcı işlevi bağlamak olun. Bu işleve, veritabanına bağlandıktan sonra SET ROWCOUNT n numarasını verin, n parametresini yapın ve değişken yapmak için gereken herhangi bir mantığı ekleyin. CONTEXT_INFO ile benzer bir şey yapıyorum, bağlantı işlevimde ayarladım.

Unutmayın, bu sarmalayıcı işlevini kullanarak uygulamanızın her yerine veritabanına bağlanmanız (aramayı ve değiştirmeyi) ve sonuç olarak her zaman için satır sayısı ayarını ayarlamanız gerekir.

+0

bu en az çözüm olacak! ama bu yolla, bulup değiştirip değiştirmediğim sürece kodun büyük kısmını değiştirmek zorundayım! ama riskli ve maliyetli ... – mqpasta

0

başvurusu üzerine, başlangıç ​​aşağıdaki komutu yürüterek RowCount reset:

command.CommandText = "SET ROWCOUNT " + rowCount + ";"; 
: Belirli mod etkinleştirildiğinde

command.CommandText = "SET ROWCOUNT 0;"; 

aşağıdaki komutu yürüterek ihtiyaç duyulan değere RowCount set

Belirli mod devre dışı bırakıldığında, tekrar RowCount sıfırlayın.


Sen kullandığınız uygulama dilini söz etmeyin SET ROWCOUNT (Transact-SQL)

+0

İşe yaramadı ... sadece belirli bir komut için ayarlandı ama tüm gelecek sorgular için değil ... – mqpasta

5

Tüm komutları

DECLARE @rows int 
SET @row = ISNULL(@row, 2000000000) 
SELECT TOP (@rows) ... FROM .. 

Sen

SET ROWCOUNT SqlCommandSystem.Data.CommandBehavior.SequentialAccess

sarılması veya genişleterek bu şekilde söylemek tüm sorgular için genel olarak tanımlanmış TOP olabilir için kodunuzda TOP parametre cinsinden bir güvenli değil seçenek: ara sonuç kümelerini etkiler ve diğer öngörülemeyen davranışlara sahiptir. I/U/D DML göz ardı etmek Ve kısmen önerilmemektedir: see MSDN

, SİL INSERT etkilemez SET ROWCOUNT kullanarak ve UPDATE deyimleri SQL Server'ın bir sonraki sürümünde

+0

ROWCOUNT kullanmanın sonucunu anlıyorum ama aslında, select deyimini etkiliyorum ... her neyse! En iyi kullanmak, gerçekten yapmak istemediğim tüm sorgularımı değiştirmem gerekiyor! Bunu başarmak için bir veritabanı seviyesi parametresi arıyorum! – mqpasta

+0

@mqpasta: "Geri dönmek veya etkilemek için kayıt sayısını ayarlamak için RowCount'umuz var." "Etkileme" ifadesinin silme, ekleme, güncelleme vb. Anlamına geldiğini farz edelim. Veritabanı seviyesi ayarı yok: Bu, en aptalca şeylerden biri olacaktı. SET ROWCOUNT ile bağlantıya göre ayarlayabilirsiniz, ancak bu not * belirtildiği gibi * ve doğru olarak istediğinizi elde edemezsiniz. – gbn