【问题标题】:How to insert data into temp table from a string如何将数据从字符串插入临时表
【发布时间】:2015-01-05 03:22:20
【问题描述】:

我有一张如下表

企业(BId - BName)

  • 1 - ABC

  • 2 - 防御

  • 3 - GHI

  • 4 - JKL

我创建了一个临时表

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

现在我必须将数据从像

这样的字符串添加到#temp
Declare string = 'ABC, GHI'

我如何将上述字符串中的数据添加到#temp表中,并在#temp中添加相应的ID

表#temp的输出应该是这样的

#temp (TBID - TBNAME

  • 1 - ABC

  • 3 - GHI

【问题讨论】:

  • 其实我必须动态地做所有这些操作...
  • 字符串有'ABC, GHI' 但在临时表中你怎么得到'DEF'
  • 'DEF' 不需要插入到#temp 表中
  • 你期望的输出有2 -DEF and 3 - GHI
  • 是的,这些插入应该在 temp 中进行

标签: sql sql-server sql-server-2008


【解决方案1】:

试试这个。你需要使用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 

【讨论】:

  • 它抛出一个错误 Msg 102, Level 15, State 1, Line 15 Incorrect syntax near 'a'.
  • @Nida - 检查现在添加了表格数据
  • @Nida - 很高兴它有帮助
【解决方案2】:

试试这个

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

输出

ID  Value 
1   ABC

3   GHI

【讨论】:

  • 不包含任何插入操作
  • 他们对应的Id呢
  • 我的意思是 'ABC' 的出价是 1
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2022-01-24
相关资源
最近更新 更多