首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql server 2008中,使用一个字段将值从一个表插入到另一个表中应递增。

在sql server 2008中,使用一个字段将值从一个表插入到另一个表中应递增。
EN

Stack Overflow用户
提问于 2012-09-10 17:22:53
回答 2查看 300关注 0票数 2
代码语言:javascript
复制
declare @cid int

set @cid=(select ISNULL(MAX(cid),0)+1 from CustInfo)
insert into CustInfo(CID,CTypeId,CustNo,Regdate,
                     DOB,CCertID,CCertNo,CompId,PostedBy,PostedOn) 
(select @cid,1,0,'2012-9-10',
        dob,ccertid,ccertno,0,null,null 
 from updateCust3)

我使用上面的代码将表updateCust3中的值插入到表UpdateCustInfo中。在这种情况下,CID字段应该在每次插入时递增1。我使用了上面的代码,但是cid似乎没有增加,所以错误是主键的重复值。那么如何增加cid的值呢?由于不允许在表属性中进行更改,因此我不能使用标识属性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-10 17:31:41

试试这个:

代码语言:javascript
复制
declare @cid int

set @cid=(select ISNULL(MAX(cid),0)+1 from CustInfo)
insert into CustInfo(CID,CTypeId,CustNo,Regdate,
                     DOB,CCertID,CCertNo,CompId,PostedBy,PostedOn) 
select @cid+row_number() over (order by (select 0)),1,0,'2012-9-10',
        dob,ccertid,ccertno,0,null,null 
 from updateCust3)

编辑:正如评论中提到的MikaelEriksson,这是有风险的,如果您的用户同时尝试更新表,它将出错。

票数 1
EN

Stack Overflow用户

发布于 2012-09-10 18:58:58

已经使用临时表进行了演示。当多个用户使用时,这是避免错误的更好方法

代码语言:javascript
复制
DECLARE @Table TABLE               
        (               
           CTypeId INT identity (1,1)
           ,CustNo int
           ,DOB datetime           
         ,Regdate datetime
         ,CCertID int
              ,CCertNo int
       ,CompId int
    ,PostedBy varchar(100)
    ,PostedOn datetime
        )      

            INSERT @Table    
            select 1,0,'2012-9-10',
            dob,ccertid,ccertno,0,null,null 
     from updateCust3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12348740

复制
相关文章

相似问题

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