[英]insert SQL rows from a string with comma record-delimiter and colon-delimited name-value pairs
我們收到的數據格式如下:
'1:0,2:1,3:1,4:0'
這些值用逗號分隔:冒號之前的值是StudentId,之后是位值。
我想將這些值存儲在臨時表中:
studentID | BitValue
1 | 0
2 | 1
3 | 1
4 | 0
如何在SQL Server 2005中做到這一點?
這在MS SQL Server 2008中有效 。
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
drop table #TempTable
create table #TempTable (studentID int, BitValue int)
declare @var nvarchar(max)
set @var='1:0,2:1,3:1,4:0'
set @var='insert into #TempTable values ('+REPLACE(REPLACE(@var,',','),('), ':', ',')+')'
exec (@var)
select * from #TempTable
drop table #TempTable
對於MS SQL Server 2005 ,請嘗試:
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
drop table #TempTable
create table #TempTable (studentID int, BitValue int)
declare @var nvarchar(max)
set @var='1:0,2:1,3:1,4:0'
--set @var=REPLACE(@var,',','),(')
set @var='insert into #TempTable values ('+REPLACE(REPLACE(@var,',','); insert into #TempTable values('), ':', ',')+')'
exec (@var)
select * from #TempTable
drop table #TempTable
嘗試這個
DECLARE @param NVARCHAR(MAX)
SET @param = '1:0,2:1,3:1,4:0'
;WITH Split_Col
AS
(
SELECT CONVERT(XML,'<table><col>' + REPLACE(ColName,':', '</col><col>') + '</col></table>') AS xmlcol
FROM
(
SELECT Split.a.value('.', 'VARCHAR(100)') AS ColName
FROM
(
SELECT CAST ('<M>' + REPLACE(ColName, ',', '</M><M>') + '</M>' AS XML) AS ColName
FROM (SELECT @param AS ColName) TableName
) AS A CROSS APPLY ColName.nodes ('/M') AS Split(a)
) TableName
)
SELECT
xmlcol.value('/table[1]/col[1]','varchar(100)') AS studentID,
xmlcol.value('/table[1]/col[2]','varchar(100)') AS BitValue
FROM Split_Col
編輯
假設您的學生表具有列StudentId,名稱。 查找更新的查詢加入學生表
SELECT ST.Name,SP.studentID,SP.BitValue FROM
(
SELECT
xmlcol.value('/table[1]/col[1]','varchar(100)') AS studentID,
xmlcol.value('/table[1]/col[2]','varchar(100)') AS BitValue
FROM Split_Col
) SP
INNER JOIN Student ST on SP.studentID = ST.studentID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.