我想从表本身中复制表中的行。但是在插入之前,我需要修改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>
?
答案 0 :(得分:2)
不要尝试猜测身份列的值。在您的情况下,您可以简单地创建一个计算列secName AS CONCAT('sec-', secID)
。不再需要更新该列。
还可以创建一个AFTER INSERT
触发器来更新该列。
答案 1 :(得分:0)
在我的评论中添加以下内容:
[: : integer expression expected
答案 2 :(得分:0)
在SQL Server 2012及更高版本中,您可以使用新的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)))
答案 3 :(得分:0)
由于SQL Server没有GENERATED ALWAYS AS ('Sec - ' + id)
,所以我看到的唯一简单选择就是使用触发器。