2011-10-09 14 views
10

Link@@ rowcount> 0 öğesinin @@ rowcount değerini 0 olarak sıfırlaması durumunda yürütülür. Neden?

@@ Rowcount

declare @row int select 100 if @@rowcount>0 set @[email protected]@rowcount ... 

yukarıdaki 0 ​​kısa sürede if @@rowcount>0 olarak çünkü dönecektir ifadeleri son seçme, ekleme, güncelleme için etkilenen satır sayısını bilgilendirmek veya silmek için kullanılır çalıştırıldığında, herhangi bir satır döndürmediği için 0'a sıfırlanır. Yani hep atamak değişken ilk

Neden deyimi 0'a @@rowcount reset if @@rowcount>0 geliyor? @@rowcount değeri yalnızca seçimleri, ekleme, güncelleme ve silme ifadeleri tarafından etkilenmez mi?

Teşekkür ederiz

cevap

11

Son ifadeden etkilenir. Eğer actual Microsoft SQL Server Docs on MSDN okursanız bu SET deyimi

Declare @row int 
select 100 union all select 200 union all select 300 
set @row = @@rowcount; 
SELECT @row, @@rowcount 

gibi, tablolar @@ROWCOUNT etkileyen şeyin örnekler verir. EĞER da 0'a

için ROWCOUNT değeri sıfırlanır, bu tür KULLANIM olarak sıfır

Tablolara ayarlayın <option>, DEALLOCATE CURSOR, KAPAT CURSOR SET, BEGIN TRANSACTION veya tamamlamaya edecek gibi diğer ifadeleri ima "gibi" Örneğin

+0

1 - Anladığım kadarıyla, @@ rowcount neden 1 ve 0 değil, neden bir satır etkileyen "SELECT @row, @@ rowcount" sorgusu nedeniyle döndü. Ama sql tabloları gerçek tabloları DB tabloları ile uğraşırken, ancak select ifadeniz herhangi bir satır erişemiyor, ancak neden @@ rowcount 1 döndürür, "etkilenen satır sayısı" terimi kullandığını düşündüm. – user702769

+0

2 - Umarım bu soru biraz anlam ifade eder - nitpick için olsaydık, @@ rowcount, select deyiminden ZORUNLU satır sayısını döndürmez mi? Eğer öyleyse, “SELECT @row, @@ rowcount”, @@ rowcount için 0 değerini döndürmelidir, çünkü select deyimi @@ rowcount'tan bir değer aldığında henüz tamamlanmamıştır ve hiçbir satır etkilenmemiştir. henüz ?! – user702769

+1

@ user702769: @ SELECT @row, @@ rowcount' içindeki @@ rowcount değeri, yukarıda @ set @row = @@ rowcount; tarafından etkilenir. Bir SELECT kendi @@ rowcount – gbn

0

Pekala, Benzer bir sorunu, "if" ile yanlış olabileceğini belirten sybase kullanarak karşılaştım.

declare @counter1 int 
declare @counter2 int 

select @counter1 = @@rowcount 
if @@rowcount = 0 return 
select @counter2 = @@rowcount 

çıktısı: sayacı1 = 3 COUNTER2 = 0

I 3 (bir orijinal) ya da 1 (nedeniyle Select) beklenir. http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1540/doc/html/san1278452893271.html

ait "@@ Rowcount satırları etkilemez herhangi bir deyim tarafından sıfıra sıfırlama, değil böyle bir IF ifadesi olarak ." Çünkü

bu daha da garip Orada ben değişken için @@ rowcount atamak ilk satırda benim çözümde sonunda

(internet tartışma dayanarak) gerçekten nasıl çalıştığını kargaşasına ve benim mantık bu değişkenin

dayanmaktadır diğer yandan
+0

Evet, SQL Server @@ rowcount içinde bir "if" ifadesi tarafından sıfırlanan (zor yol) keşfetmeye şaşırdım. –