有没有使用 SQL Server 2005 插入多行并增加特定字段的简单方法?
请注意,我不是在寻找涉及identity
列的解决方案 - 请参阅问题底部以获取解释
(以下架构和数据已在此 SQLFiddle 中复制。)
例如,考虑下表和数据......
CREATE TABLE #TEMPTABLE (
[PKID] INT IDENTITY, [FKID] INT, [MYTEXT] VARCHAR(10), [SEQUENCE] INT
)
INSERT INTO #TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE]) VALUES (1, 'one', 1)
INSERT INTO #TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE]) VALUES (1, 'two', 2)
-- Table data
PKID FKID MYTEXT SEQUENCE
1 1 one 1
2 1 two 2
以及要插入的以下数据...
DECLARE @FKID INT
SET @FKID = 1
DECLARE @NEWDATA XML
SET @NEWDATA = '<data><text>three</text><text>four</text></data>'
以下内容是否可以写成该SEQUENCE
字段出现的方式1,2,3,4
而不是1,2,3,3
当前的方式?
INSERT INTO #TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE])
SELECT @FKID,
X.value('.','VARCHAR(10)'),
(SELECT ISNULL(MAX([SEQUENCE]),0)+1 FROM #TEMPTABLE WHERE [FKID]=@FKID)
FROM @NEWDATA.nodes('/data/text') AS X(X)
-- Actual result...
PKID FKID MYTEXT SEQUENCE
1 1 one 1
2 1 two 2
3 1 three 3
4 1 four 3 <-- Issue
-- Required result...
PKID FKID MYTEXT SEQUENCE
1 1 one 1
2 1 two 2
3 1 three 3
4 1 four 4
更新:
回应@marc_s 的评论...
身份将是 2005 年的最佳解决方案......迄今为止最好的解决方案 - 为什么您明确排除它并坚持自己滚动?(有导致重复等的所有风险......)
有问题的表将包含多组SEQUENCE
值,每个“组”都基于FKID
值......因此该表可以保存这些数据......
PKID FKID MYTEXT SEQUENCE
1 1 one 1
2 1 two 2
3 1 three 3
4 1 four 4
5 2 ett 1
6 2 tva 2
7 2 tre 3