我想从表中复制表中的行。但在插入之前,我需要修改一个varchar列,并将identity列的值附加到该列。我的表结构是:
secID docID secName secType secBor
1 5 sec-1 G 9
2 5 sec-2 H 12
3 5 sec-3 G 12
4 7 sec-4 G 12
5 7 sec-5 H 9如果我想复制docID 5的数据,目前这是通过循环运行的,一次一行。
我可以把我的查询写成
insert into tableA (docID, secName, secType, secBor)
select 8, secName, secType, secBor from tableA where docID = 5但是如何预先设置secName的值,使其成为sec-<value of secID column>呢?
发布于 2018-09-20 02:32:59
不要试图猜测identity列的值。在本例中,您可以简单地创建一个计算列secName AS CONCAT('sec-', secID)。不再需要更新该列。
还可以创建一个AFTER INSERT触发器来更新列。
发布于 2018-09-20 02:10:00
在我的评论中添加如下内容:
insert into tableA (docID, secName, secType, secBor)
select
ROW_NUMBER() OVER (ORDER BY DocID),
'Sec -'+ ROW_NUMBER() OVER (ORDER BY DocID),
secType, secBor
from tableA
where docID = 5发布于 2018-09-20 02:21:01
在SQL Server2012和更高版本中,您可以通过使用新的sequence object来实现这一点。
CREATE SEQUENCE TableAIdentitySeqeunce
START WITH 1
INCREMENT BY 1 ;
GO
create table TableA
(
secId int default (NEXT VALUE FOR TableAIdentitySeqeunce) not null primary key,
varcharCol nvarchar(50)
)
declare @nextId int;
select @nextId = NEXT VALUE FOR TableAIdentitySeqeunce
insert TableA (secId, varcharCol)
values (@nextId, N'Data #' + cast(@nextId as nvarchar(50)))https://stackoverflow.com/questions/52411791
复制相似问题