我們RowCount
設置的記錄數返回或影響。但是我們需要在執行sql語句之前每次都設置它。我正在尋找一種方式來設置這個,一旦我的應用程序啓動,所以它影響所有查詢執行通過我的應用程序。的SQL Server:最大記錄數返回
更新
我要實現以有限的記錄試用版咯!我不想混淆我的實際代碼,並希望以某種方式限制任何查詢結果中的記錄數量。另一種方法是將參數傳遞給每個商店程序,但我真的不喜歡這個並尋找其他策略!
我們RowCount
設置的記錄數返回或影響。但是我們需要在執行sql語句之前每次都設置它。我正在尋找一種方式來設置這個,一旦我的應用程序啓動,所以它影響所有查詢執行通過我的應用程序。的SQL Server:最大記錄數返回
更新
我要實現以有限的記錄試用版咯!我不想混淆我的實際代碼,並希望以某種方式限制任何查詢結果中的記錄數量。另一種方法是將參數傳遞給每個商店程序,但我真的不喜歡這個並尋找其他策略!
你沒有提到你正在使用的應用程序的語言,所以我不能給你的代碼,但使一個數據庫的包裝功能連接。在此功能,您連接到數據庫後,發出SET ROWCOUNT n
,使n
參數,並添加你需要使它變量的任何邏輯。我用CONTEXT_INFO做類似的事情,我把它設置在我的連接函數中。
記住,你需要使用這種包裝功能處處連接到數據庫的應用程序(使用搜索和替換),作爲結果,你會永遠擁有的行數集。
這將是最不好的解決方案!但通過這種方式,我不得不更改很多代碼,無論是通過查找還是替換!但它是冒險和昂貴的...... – mqpasta 2011-06-09 09:16:27
在應用啓動時,通過執行以下命令重置RowCount
:
command.CommandText = "SET ROWCOUNT " + rowCount + ";";
:
command.CommandText = "SET ROWCOUNT 0;";
當特定模式被激活時,通過執行以下命令設置RowCount
到所需要的值
當特定模式被停用,再次復位RowCount
。
我發現它沒有工作...它只是爲特定的命令設置,但不是爲所有即將到來的查詢... – mqpasta 2011-06-09 07:15:23
你可以在你的代碼進行參數化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語句
現在你爲什麼會想要那樣做? – 2011-06-08 11:18:25
好吧,我想限制我的應用程序來獲取在特定模式下記錄的具體數量... – mqpasta 2011-06-08 11:22:55
這聽起來很危險的 - 第6個月下來,你正在做一些無關變化的應用程序,它突然要更新25行。但在其他地方,您已將應用程序限制設置爲20,現在突然顯示5行不會更新,但不會顯示錯誤消息。 6個月進一步向下行,你就開始研究爲什麼一些更新似乎並不正確的工作... – 2011-06-08 11:59:31