【发布时间】:2020-05-07 17:02:57
【问题描述】:
我需要在名为productsort 的表中插入一个逗号分隔的字符串值。我的表结构如下
+-------------+-----------+
| fkProductID | SortValue |
+-------------+-----------+
| | |
+-------------+-----------+
我有一个自定义拆分函数,用于将值与逗号分隔的字符串分开
DECLARE @Var VARCHAR(4000);
SET @Var = '188,189,190,191,192,193,194'
-- Insert statement
INSERT INTO productsort(fkProductID)
SELECT * FROM dbo.fnSplitStringToIds(@Var,',')
上面的查询工作正常,插入表数据后如下,
+-------------+-----------+
| fkProductID | SortValue |
+-------------+-----------+
| 188 | |
| 189 | |
| 190 | |
| 191 | |
| 192 | |
| 193 | |
| 194 | |
+-------------+-----------+
现在我还需要在SortValue 列中插入一个增量值,我需要以下输出,
+-------------+-----------+
| fkProductID | SortValue |
+-------------+-----------+
| 188 | 1 |
| 189 | 2 |
| 190 | 3 |
| 191 | 4 |
| 192 | 5 |
| 193 | 6 |
| 194 | 7 |
+-------------+-----------+
我该怎么做?
更新:
逗号分隔的字符串可以是这样的193,191,190,189,192,188,194。在这种情况下,我的预期输出应该是
+-------------+-----------+
| fkProductID | SortValue |
+-------------+-----------+
| 193 | 1 |
+-------------+-----------+
| 191 | 2 |
+-------------+-----------+
| 190 | 3 |
+-------------+-----------+
| 189 | 4 |
+-------------+-----------+
| 192 | 5 |
+-------------+-----------+
| 188 | 6 |
+-------------+-----------+
| 194 | 7 |
+-------------+-----------+
【问题讨论】:
-
“更好”的字符串拆分器将为每个返回的
Item返回一个ItemNumber,例如Jeff Moden's。顺序重要吗?如果是这样,请注意String_Split说“输出行可能是任何顺序。顺序不保证与输入字符串中子字符串的顺序匹配。”
标签: sql-server csv tsql sql-insert sql-server-2016