sql拷贝的标识列作为字符串

时间:2012-09-12 14:44:41

标签: sql

我创建一个只创建行副本但更改某些值的过程。

在新创建的记录(现有记录的副本)中,我需要其中一个字段作为新创建记录的recordID(自动生成的IDENTITY列)的字符串表示。

CREATE PROC sp @RecordID int
AS
BEGIN
    INSERT INTO TheTable([RecordName], ...)
    SELECT CAST(@RecordID as nvarchar(500)), ...
    FROM TheTable
    WHERE [RecordID] = @RecordID
END

我的代码错误,因为它将RecordName设置为正在复制FROM的记录的RecordID。我需要RecordName与正在创建的记录的RecordID相同。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我认为你描述的内容是不可能的 - 在语句完成之前,身份值不可用 - 但是有一个简单的解决方法:

CREATE PROC sp @RecordID int
AS
BEGIN
    INSERT INTO TheTable([RecordName], ...)
    SELECT 'temporary dummy value', ...
    FROM TheTable
    WHERE [RecordID] = @RecordID
    ;

    UPDATE TheTable
    SET [RecordName] = CAST(@@IDENTITY as nvarchar(500))
    WHERE [RecordID] = @@IDENTITY
    ;
END

(见the documentation for @@IDENTITY。)

答案 1 :(得分:1)

听起来你需要分2步执行此操作 - 将新数据插入表中,然后使用新记录ID更新记录

例如(假设是Sql Server),

declare @myNewID int    

INSERT INTO TheTable([RecordName], ...)
SELECT CAST(@RecordID as nvarchar(500)), ...
FROM TheTable
WHERE [RecordID] = @RecordID

set @myNewID = SCOPE_IDENTITY()

UPDATE TheTable
    set [RecordName] = CAST(@myNewID as nvarchar(500))
WHERE [RecordID] = @myNewID