【发布时间】:2016-07-22 02:48:02
【问题描述】:
所以我将字符串值发送到数据库
@string = 'Value1|Value2|Value3|Value4, OtherVal1|OtherVal2|OtherVal3|OtherVal4'
还有一些其他的ID
@id = '1'
我想先在','上拆分它,然后在|上拆分它并插入到表中
例子
TABLE
ID | COLUMN1 |COLUMN2 |COLUMN3 |COLUMN4 |COLUMN5
ai | @id | value1 |value2 |value3 |value4
ai | @id2 |otherVal1 |otherVal2 |otherVal3 |otherVal4
这是我到目前为止所做的代码,但我的另一个 while 函数按值返回值,
DECLARE @string nvarchar(max)
DECLARE @IDSet nvarchar(max)
DECLARE @columnsValue nvarchar(max)
DECLARE @columnsPos int
DECLARE @pos int
DECLARE @nextPost int
DECLARE @delimiter nchar(1)
DECLARE @delimiter2 nchar(1)
SET @delimiter2 = '|'
SET @delimiter = ','
SET @string = 'ColumnName|autocompleteId|autocompleteValue|AndOrStatus,ColumnName1|autocompleteId1|autocompleteValue1|AndOrStatus1' + @delimiter
SET @pos = charindex(@delimiter, @string)
WHILE(@pos <> 0)
BEGIN
SET @IDSet = substring(@string,1,@pos -1) + @delimiter2
--SELECT @IDSet
SET @columnsPos = charindex(@delimiter2,@IDSet)
WHILE(@columnsPos <> 0)
BEGIN
SET @columnsValue = substring(@IDSet ,1,@columnsPos - 1)
SELECT @columnsValue
SET @IDSet = substring(@IDSet,@columnsPos +1, LEN(@IDSet))
SET @columnsPos = charindex(@delimiter2,@IDSet)
END
SET @string = substring(@string,@pos + 1,LEN(@string))
SET @pos = charindex(@delimiter,@string)
END
当前代码经过两个 while 语句并按其分隔符拆分代码,
知道如何从中插入表格。
【问题讨论】:
-
是否总是4个值
-
@Prdp 会的
-
@Prdp 我已经开始做这样的事情,而不是第二个 while 语句 SELECT SUBSTRING(@IDSet , 1 , CASE CHARINDEX('|',@IDSet) WHEN 0 THEN LEN(@IDSet) ELSE charindex ('|',@IDSet)-1 END) AS test1, SUBSTRING(@IDSet , CASE CHARINDEX('|',@IDSet) WHEN 0 THEN len(@IDSet)+1 ELSE CHARINDEX('|',@IDSet) +1 END, 1000) AS test2 但是我如何选择直到下一个'|'而不是接下来的 1000 个字符
标签: sql sql-server split insert delimiter