2014-11-08 58 views
0

我有一個表,如下如何從一個字符串將數據插入到臨時表中

業務(BID - BNAME)

  • 1 - ABC

  • 2 - DEF

  • 3 - GHI

  • 4 - JKL

我創建的臨時表

Create table #Temp(
TBID int, 
TBNAME nvarchar(50) 
); 

現在我必須將數據從一個字符串添加到#TEMP像

Declare string = 'ABC, GHI' 

我將如何添加數據到#temp表來自上面的字符串及其對應的ID在#temp中

表#temp的輸出應該類似於

#TEMP(TBID - TBNAME

  • 1 - ABC

  • 3 - GHI

+0

其實我需要做的所有這些操作動態... – Nida 2014-11-08 11:10:31

+0

字符串中有'「ABC,GHI''但在臨時表怎麼來的你有'」 DEF'' – 2014-11-08 11:11:45

+0

「DEF」不需要不在#temp表中插入 – Nida 2014-11-08 11:16:31

回答

2

試試這個..需要使用LTRIM and RTRIM在轉換成行後在開始和結束時刪除不需要的空間。

CREATE TABLE #Business 
    (BId INT,BName VARCHAR(50) 
) 

INSERT INTO #Business 
VALUES  (1,'ABC'),(2,'DEF'),(3,'GHI'),(4,'JKL') 

DECLARE @strng VARCHAR(max) = 'ABC, GHI' 

SELECT B.BId AS TBIB, 
     B.BName TBName 
INTO #temp 
FROM (SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) AS Data 
     FROM (SELECT Cast ('<M>' + Replace(@strng, ',', '</M><M>') + '</M>' AS XML) AS Data) AS A 
       CROSS APPLY Data.nodes ('/M') AS Split(a)) a 
     JOIN #Business B 
     ON a.data = B.BName 

SELECT * 
FROM #temp 
+0

它引發錯誤消息102,級別15,狀態1,行15 'a'附近語法不正確。 – Nida 2014-11-08 11:47:10

+0

@Nida - 檢查現在添加的表格數據 – 2014-11-08 11:52:06

+0

它的工作......謝謝你這麼多... – Nida 2014-11-08 11:54:40

1

嘗試這種

DECLARE @S varchar(max), 
     @Split char(1), 
     @X xml 

SELECT @S = 'ABC, GHI', 
     @Split = ',' 

SELECT @X = CONVERT(xml,' <root> <s>' + 
REPLACE(@S,@Split,'</s> <s>') + '</s> </root> ') 


SELECT [Value] = T.c.value('.','varchar(20)') into #tempTbl 
FROM @X.nodes('/root/s') T(c) 

select Bus.ID,tbl.Name from #tempTbl tbl JOIN Business Bus 
on tbl.Value=Bus.BName 

OUTPUT

ID Value 
1 ABC 

3 GHI 
+0

它不包含任何插入操作 – Nida 2014-11-08 11:12:27

+0

@Nida現在更新了temptbl – 2014-11-08 11:14:49

+0

那麼他們對應的Id的 – Nida 2014-11-08 11:18:08

相關問題