2011-06-08 160 views
5

我們RowCount設置的記錄數返回或影響。但是我們需要在執行sql語句之前每次都設置它。我正在尋找一種方式來設置這個,一旦我的應用程序啓動,所以它影響所有查詢執行通過我的應用程序。的SQL Server:最大記錄數返回

更新

我要實現以有限的記錄試用版咯!我不想混淆我的實際代碼,並希望以某種方式限制任何查詢結果中的記錄數量。另一種方法是將參數傳遞給每個商店程序,但我真的不喜歡這個並尋找其他策略!

+2

現在你爲什麼會想要那樣做? – 2011-06-08 11:18:25

+0

好吧,我想限制我的應用程序來獲取在特定模式下記錄的具體數量... – mqpasta 2011-06-08 11:22:55

+1

這聽起來很危險的 - 第6個月下來,你正在做一些無關變化的應用程序,它突然要更新25行。但在其他地方,您已將應用程序限制設置爲20,現在突然顯示5行不會更新,但不會顯示錯誤消息。 6個月進一步向下行,你就開始研究爲什麼一些更新似乎並不正確的工作... – 2011-06-08 11:59:31

回答

2

你沒有提到你正在使用的應用程序的語言,所以我不能給你的代碼,但使一個數據庫的包裝功能連接。在此功能,您連接到數據庫後,發出SET ROWCOUNT n,使n參數,並添加你需要使它變量的任何邏輯。我用CONTEXT_INFO做類似的事情,我把它設置在我的連接函數中。

記住,你需要使用這種包裝功能處處連接到數據庫的應用程序(使用搜索和替換),作爲結果,你會永遠擁有的行數集。

+0

這將是最不好的解決方案!但通過這種方式,我不得不更改很多代碼,無論是通過查找還是替換!但它是冒險和昂貴的...... – mqpasta 2011-06-09 09:16:27

0

在應用啓動時,通過執行以下命令重置RowCount

command.CommandText = "SET ROWCOUNT " + rowCount + ";"; 

command.CommandText = "SET ROWCOUNT 0;"; 

當特定模式被激活時,通過執行以下命令設置RowCount到所需要的值

當特定模式被停用,再次復位RowCount


參考SET ROWCOUNT (Transact-SQL)

+0

我發現它沒有工作...它只是爲特定的命令設置,但不是爲所有即將到來的查詢... – mqpasta 2011-06-09 07:15:23

5

你可以在你的代碼進行參數化TOP所有命令

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

您可以爲您所有的疑問這種方式,比方說通過包裝或延長的SqlCommand

SET ROWCOUNT全局定義TOP不是一個安全的選項:它影響中間結果集並具有其他不可預知的行爲。而且這部分不贊成以忽略在I/U/d DML:在SQL Server的下一個版本see MSDN

使用SET ROWCOUNT將不會影響DELETE,INSERT和UPDATE語句

+0

我理解使用ROWCOUNT的結果,但事實上,我只是影響select語句......無論如何!使用頂級的意思是我需要改變我所有我不想做的查詢!我正在尋找一個數據庫級別的參數來實現這一點! – mqpasta 2011-06-09 07:16:36

+0

@mqpasta:你說過「我們有RowCount來設置要返回或影響的記錄數」。我認爲「影響」意味着刪除,插入,更新等。沒有數據庫級別的設置:這將是有史以來最愚蠢的事情之一。您可以使用SET ROWCOUNT對每個連接進行設置,但是這有* *問題*,並且無法正確實現 – gbn 2011-06-09 07:19:13