【问题标题】:SQL Get id value and insert into another columnSQL获取id值并插入另一列
【发布时间】:2022-02-05 03:29:08
【问题描述】:

我正在尝试创建一个 sql 语句,该语句将插入一条初始记录,检索新的 id(自动编号主键)并将其插入表中的另一列以用作默认值。

这是我目前所拥有的:

INSERT INTO users (first_name, last_name, email, password, shot, year, campus, subject,

 qual_level, job_title, blurb, presentions, offers, moderated, version_current,

 version_replace, salt, loggable) VALUES (@sfirst_name, @slast_name, @semail, @spassword,

 @sshot, @syear, @scampus, @ssubject, @squal_level, @sjob_title, @sblurb, @spresentions, 

@soffers, @smoderated, @scurrent_version, @sversion_replace, @ssalt, 1) SELECT 

SCOPE_IDENTITY() as NewId UPDATE users (version_replace) VALUES (NewId) WHERE id = NewId

这不是按原样工作的,我可以用手来纠正语法

【问题讨论】:

    标签: sql insert scope-identity


    【解决方案1】:

    你的更新是不对的,应该是

    UPDATE 
        users 
    SET 
        version_replace =  SCOPE_IDENTITY()
    
    WHERE id = SCOPE_IDENTITY()
    

    这是因为这种说法

    SELECT SCOPE_IDENTITY() as NewId

    对以下语句没有影响

    如果你愿意,你也可以使用一个变量来存储 NewID

    DECLARE @NewID  int
    SET @NewId =  SCOPE_IDENTITY()
    
    UPDATE 
        users 
    SET 
       version_replace =  @NewID  
    WHERE id =@NewID 
    

    如果您对多行执行此操作,您可能希望查看OUTPUT Clause

    【讨论】:

    • 我现在将 NewId (varchar) 转换为 int 时出错。这很奇怪,因为两者都存储为 int。可以在sql语句中转换数据类型吗?
    • @Ysol8。是的,您可以使用CASTCONVERT,但这听起来不对。我认为您不小心使用了返回 GUID 的 NewID 函数
    • 谢谢 - 工作就像一个魅力。我想我将不得不学习复杂的 SQL。似乎可以节省时间。
    猜你喜欢
    • 2017-06-14
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2010-10-11
    • 2011-09-15
    相关资源
    最近更新 更多