我创建一个只创建行副本但更改某些值的过程。
在新创建的记录(现有记录的副本)中,我需要其中一个字段作为新创建记录的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相同。
感谢您的帮助
答案 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
答案 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