首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在插入之前知道身份

在插入之前知道身份
EN

Stack Overflow用户
提问于 2018-09-20 02:05:06
回答 4查看 191关注 0票数 0

我想从表中复制表中的行。但在插入之前,我需要修改一个varchar列,并将identity列的值附加到该列。我的表结构是:

代码语言:javascript
复制
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的数据,目前这是通过循环运行的,一次一行。

我可以把我的查询写成

代码语言:javascript
复制
insert into tableA (docID, secName, secType, secBor)
select 8, secName, secType, secBor from tableA where docID = 5

但是如何预先设置secName的值,使其成为sec-<value of secID column>呢?

EN

回答 4

Stack Overflow用户

发布于 2018-09-20 02:32:59

不要试图猜测identity列的值。在本例中,您可以简单地创建一个计算列secName AS CONCAT('sec-', secID)。不再需要更新该列。

DB Fiddle

还可以创建一个AFTER INSERT触发器来更新列。

票数 2
EN

Stack Overflow用户

发布于 2018-09-20 02:10:00

在我的评论中添加如下内容:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-09-20 02:21:01

在SQL Server2012和更高版本中,您可以通过使用新的sequence object来实现这一点。

代码语言:javascript
复制
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)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52411791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档