2015-05-19 59 views
1

SQL Server管理Studio 2012是我正在使用的。總結一下,我想一次執行幾個命令。我是一名.NET開發人員,所以我認爲就if和elses而言。SQL - 基於臨時表數據集更改列值

我在[表資料]這樣的原始數據:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final 
1 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-13| 0  | Y 
2 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-13| 1  | N 
3 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-24| 2  | Y 
4 | 2001 | 2653 | 40  | 2014-12-29| 2014-12-29| 0  | Y 
5 | 2001 | 2653 | 40  | 2014-12-29| 2014-12-29| 1  | N 

我插入的數據從表資料到稱爲TempData的一個臨時表,其中Adj​​Code = 1

TMP表[TempData的]數據:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code 
1 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-13| 1 
2 | 2001 | 2653 | 40  | 2014-12-29| 2013-12-29| 1 

我想通過[Type Code]檢查TempData中的每一行。

如果[類型代碼]是'10',那麼我想在TableData上做一個新的選擇,其中TempData的[代碼1],[代碼2],[類型代碼]和[從日期]列匹配。

看起來應該像這樣:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final 
1 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-13| 0  | Y 
2 | 2001 | 9982 | 10  | 2015-01-13| 2015-01-24| 2  | Y 

然後基於關閉此記錄,如果有一個[ADJ代碼]與「2」我想更新相應的資料表上的[決賽]列「Y」。同樣,如果[Adj Code] = 0,我將更新匹配TableData的匹配記錄,並將[N]替換爲[Final]列'N'。

如果[類型代碼]不是'10'另一個在這種情況下'40'),我想要做同樣的過程,除了添加[Thru Date]以及...看起來像這樣: 選擇TableData其中TempData的[代碼1],[代碼2], [類型代碼]和[從日期]和[直到日期]列匹配。

看起來應該像這樣的:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final 
1 | 2001 | 2653 | 40  | 2014-12-29| 2014-12-29| 0  | Y 
2 | 2001 | 2653 | 40  | 2014-12-29| 2014-12-29| 1  | N 

我希望這個心不是太混亂了......我很樂意提供更多的信息,因爲我需要完成這個在工作中的一個項目儘快。謝謝。

+0

請顯示您的Sql。您必須爲此編寫存儲過程。祝你好運 – Hiten004

+0

我沒有寫任何sql。 – tshoemake

+0

我通過使用嵌套遊標解決了這個問題。 http://stackoverflow.com/questions/469019/cursor-inside-cursor – tshoemake

回答

0

我使用嵌套的遊標本文以下內容:stackoverflow.com/questions/469019/cursor-inside-cursor

雖然這是一個臨時的解決方案和工作原理,運行時是使用遊標慢得令人難以置信。完成我的查詢需要花費一個多小時(命中90多條記錄)。