2012-09-15 21 views
11

我已閱讀了一些關於ROWCOUNT的文章,但它並不完全在尋找。從我的理解rowcount指出在您運行查詢後受影響的行數。在你運行查詢之前,我正在尋找什麼。這可能嗎?如何知道有多少行會在運行Microsoft SQL Server 2008中的查詢之前受到影響

+0

不,它是不可能沒有做兩個查詢。爲什麼你需要這樣做呢?根據請求的原因,如果查詢符合預期,則可以執行查詢檢查「@@ ROWCOUNT」,然後進行提交。或者使用'COUNT(*)OVER()'返回查詢的行數。 –

回答

10

簡短的答案是否定的。

在SQL服務器執行query..atleast之前,你不能得到的行數。

做到這一點的最好辦法是使用

Select count(*) from <table> where <condtion> 

然後執行實際查詢

[delete]or [update] [set col='val'] 
from <table> where <condtion> 
+0

儘管可以使用SQL Server分析函數來獲取正在生效的總行數。但這只是在運行時。 – rvphx

+0

將不會總是正確的,因爲更新將跳過無需更改的行。例如:新值和舊值已經相同。 –

+0

@HimanshuSaini:據我所知,在更新之前,SQL服務器不會檢查舊值和新值是否相同。它只是用匹配條件更新所有記錄。如果您有任何相關文件,請分享。這對我來說是新的學習 –

1

最簡單的解決方案是在運行SELECT * FROM...時用SELECT Count(*) FROM ...替換其餘的查詢(WHERE子句必須相同)。這會告訴你多少行將會受到影響

3

估計執行計劃將會給你行受到影響,統計數據,因此它贏得了」在這種情況下,你真的會幫助你。

我推薦的是複製你的UPDATE statementDELETE statement並將它變成SELECT。運行該程序以查看有多少行可以返回,並且您有多少行將被更新或刪除的答案。

如:

UPDATE t 
SET t.Value = 'Something' 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 

變爲:

SELECT COUNT(*) 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 
5

執行操作之前,您還可以使用BEGIN TRANSACTION。您可以看到受影響的行數。從那裏,提交結果或使用ROLLBACK將數據恢復到原始狀態。

BEGIN TRANSACTION

更新表 組山坳= '東西' 其中COL2 = '別的東西';

提交/回滾

相關問題