从具有逗号记录分隔符和冒号分隔的名称-值对的字符串中插入SQL行
我们收到的数据格式如下:从具有逗号记录分隔符和冒号分隔的名称-值对的字符串中插入SQL行,sql,database,sql-server-2005,Sql,Database,Sql Server 2005,我们收到的数据格式如下: '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('temp
'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
这适用于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
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