2017-08-31 50 views
-3

我得到了一個帶有動態sql語句的表規則。通過一個程序,一個特定的規則(計算)可以應用在一個表格上。但是現在我想要在該表上應用所有規則(來自select)。有沒有辦法做到這一點,而不使用遊標? 首先我試着使用函數。但是這些不會讓我執行動態SQL。所以我結束了程序和遊標。T-SQL - 爲select語句的每一行執行程序個人需要光標?

+0

如果我理解你的問題,你想要爲每個查詢結果執行一個存儲過程?如果是這樣,是的,這必須用光標完成(至少據我所知)。 – Siyual

+0

對,就是這個問題。我希望能找到更快的解決方案來加快速度,因爲這些程序將會經常執行。 –

+2

您可以構建一個包含所有規則和過程並執行它的動態'T-SQL'語句。你能提供更多細節嗎?你有什麼 - 表名,程序和一些規則(輸入參數)? – gotqn

回答

0

從我懷疑,你有一些規則表,例如RuleID = 1,Rule ='(field1 * field2)+ field3'。所以你訴諸動態SQL來建立一個聲明實際上應用規則。很公平,因爲沒有別的東西可以處理這些文字。這種方式是的,你可能不得不求助於遊標並在每一行建立sql + execute。 另一個解決方法是,如果規則不是很多而不是用戶定義的,則會將規則轉換爲實際語句並在啓用時使用聯接應用。上面的例子會是這樣的:

SELECT 
... 
,CASE WHEN RuleID = 1 THEN (field1*field2)+field3 ELSE NULL END AS Rule1Result 
FROM mytable JOIN rulestable ...