2014-11-08 81 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