【发布时间】:2011-08-08 15:42:56
【问题描述】:
我有一个查询,我需要将行“批量”插入到具有没有标识的主键的表中。
--TableA
--PK int (Primary key, no-identity)
--CustNo int
INSERT INTO TableA (PK,CustNo)
SELECT (SELECT MAX(PK)+1 AS PK FROM TableA), CustNo
FROM Customers
(简化示例 - 请不要评论可能的并发问题 :-))
问题是它不会为每个已处理的行增加 PK,并且我得到主键违规。
我知道如何使用游标/while 循环来完成,但我想避免这种情况,并以基于集合的方式解决它,如果这可能的话?
(运行 SQL Server 2008 标准版)
【问题讨论】:
-
为什么不将该列设为标识列?
-
+1 @Cybernate - 这是一个糟糕的主意,如果您费心在 SO 上搜索,大约有 20 个与此类似的问题,每个问题都会告诉您为什么这是一个坏主意。
-
长话短说:如果可以的话,我会做一个身份:-)。 @JNK我打扰了,但这是我唯一的选择,我想以最好的方式解决它。另请记住,我提供了一个简化的示例。
-
请详细说明是什么阻止了您使其成为身份。是的,在很多情况下,身份有(更好的)替代方案,但如果没有有效的用途,那么身份一开始就不是一个特征。
标签: sql-server tsql sql-server-2008 batch-insert