是否有插入多行,并增加一个特定的领域,使用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