Kor*_*rsG 13 t-sql sql-server sql-server-2008 batch-insert
我有一个查询,我需要"批量"插入行与没有标识的主键的表.
--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
Run Code Online (Sandbox Code Playgroud)
(简化示例 - 请不要评论可能的并发问题:-))
问题是它没有为每个"处理的"行增加PK,并且我得到主键违规.
我知道如何使用游标/ while循环,但我想避免这种情况,并以基于集合的方式解决它,如果这甚至可能的话?
(运行SQL Server 2008 Standard)
Mic*_*uen 25
Declare @i int;
Select @i = max(pk) + 1 from tablea;
INSERT INTO TableA (PK, custno)
Select row_number() over(order by custno) + @i , CustNo
FROM Customers
Run Code Online (Sandbox Code Playgroud)
小智 7
给Michael Buen +1,但我有一个建议:
表"tablea"可以为空,所以我们应该写:
Select @i = isnull(max(pk),0) + 1 from tablea;
Run Code Online (Sandbox Code Playgroud)
这将在尝试使用此代码时防止出现null错误.
| 归档时间: |
|
| 查看次数: |
36784 次 |
| 最近记录: |