2012-04-19 191 views
1

這是我擁有的數據的類型:T-SQL:從一個表插入到另一個數據不curosrs

ENT*2*2J*EI*A25530181 
NM1*IL*1*DOBIAS*ROSE*M 
RMR*AZ*10100314**362.45 
DTM*582****RD8*20120301-20120331 
ENT*3*2J*EI*A54700554 
NM1*IL*1*LOMBARDO*LUIS*J 
RMR*AZ*10100314**362.45 
DTM*582****RD8*20120301-20120331 

的情況是,我需要從每一行提取信息,並填充另一個表與它。所以就像從ENT開始的行一樣,我需要代碼A25530181並把它放到另一個表中。我已經把所有的邏輯都提取出來了。只需要弄清楚如何將它放入另一個沒有遊標的表中。來自該表的前4行的信息將是新行中的一行。因此,

ENT*2*2J*EI*A25530181 
NM1*IL*1*DOBIAS*ROSE*M 
RMR*AZ*10100314**362.45 
DTM*582****RD8*20120301-20120331 

將用於填充新表的一行,客戶端代碼,日期和金額來自上面給出的數據。行是DTM提供的日期,與行RMR提供的速率。我有邏輯提取信息。只需要幫助,將其放入新表中而不用光標。

下面是示例邏輯:

SELECT @Asterisk1Pos = CHARINDEX(@Delimeter, REVERSE(DATA)) - 1 
from @TEMP_TABLE 
WHERE LEFT(DATA,3) = 'ENT' 

SELECT TOP 1 RIGHT(DATA, @Asterisk1Pos) 
from @TEMP_TABLE 
WHERE LEFT(DATA,3) = 'ENT' 

這樣,我只是一行信息。

+1

這不是我想在T-SQL中做的事情,如果我有選擇的話。 T-SQL沒有從字符串操作中得到很好的支持。 – 2012-04-19 22:25:28

+0

我知道,對吧?我們遇到的事情是爲了生活。 :) – OBL 2012-04-19 22:27:23

+0

您是將數據插入到其他表中還是更新現有行?如果是後一種情況,您應該能夠與表連接並直接從'@ Temp_Table'查詢更新相關列。 – mellamokb 2012-04-19 22:29:18

回答

1

你說你有提取邏輯,用於解析記錄中的數據,所以我不會詳談。您的問題似乎是您必須根據其內容處理每條記錄,不能使用DTS或SSIS,可以使用T-SQL,但不能使用遊標。

如果您可以使用DTS或SSIS,或者可以使用PC編程語言處理您的記錄並執行插入語句,那麼請執行此操作。如果這是一個特別的事情,你可以在Excel中預處理你的記錄,我甚至會在T-SQL中實現這一點之前做到這一點。但是,如果申請沒有那些和T-SQL是你唯一的工具,這裏有步驟的說明,如果我處在你的位置,我會帶:

  1. 在它的記錄中創建一個臨時表但表示行號的附加列。你可以通過使用ROW_NUMBER()函數來獲取它。 (看看它:語法是有點的大多數T-SQL函數出發。)

  2. 假設你的臨時表被稱爲@Temp和你的領域被稱爲RecordNumberData,創建連接的四個其他臨時表(它總是四,對不對?)屬於連成一條記錄,像這樣記錄:

    SELECT T1.RecordNumber, T1.data爲數據1, T2.data爲數據2, T3.data作爲數據3, T4.data as Data4 FROM @Temp T1 JOIN @Temp T2 ON T1.RecordNumber = T2.RecordN赭 - 1 JOIN @temp T3 ON T1.RecordNumber = T3.RecordNumber - 2 JOIN @temp T4 ON T1.RecoreNumber = T4.RecordNumber - 3

    我們會打電話給你的第二個臨時表@Temp2

  3. 寫表值函數,接受所有5個字段從@ TEMP2作爲參數並返回一個表值函數,與所述輸出表的格式是所述目標表。這是你放置所有解析邏輯的地方。假設你的函數叫dbo.udf_Function1

  4. 執行插入到目標表(我們稱之爲目標),像這樣:

    INSERT INTO @Target SELECT * F1從 @ TEMP2 T2 CROSS APPLY dbo.udf_Function1(T2。 .RecordNumber,T2.Data1,T2.Data2,T2.Data3,T2.Data4)F1

這工作,因爲十字適用於(我認爲)SQL 2005中引入能力,這將有效果將每個呼叫返回的單個記錄彙總到一組記錄中,whi您可以從插入中選擇。

+0

我以其他方式解決了問題。但仍然感謝您的幫助。 – OBL 2012-04-20 17:53:15

相關問題