0

行のコピーを作成するだけで、いくつかの値を変更するプロシージャを作成しています。

新しく作成されたレコード(既存のレコードのコピー)では、フィールドの1つが、新しく作成されたレコードの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をコピー元のレコードのRecordIDに設定するため、私のコードは間違っています。RecordNameは、作成されるレコードのRecordIDと同じである必要があります。

助けてくれてありがとう

4

2 に答える 2

2

あなたが説明することは可能だとは思いません—ステートメントが完了するまでID値は利用できません—しかし、簡単な回避策があります:

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

のドキュメントを@@IDENTITY参照してください。)

于 2012-09-12T14:51:45.740 に答える
1

これは2つのステップで行う必要があるようです。新しいデータをテーブルに挿入してから、新しいrecordIDでレコードを更新します。

たとえば(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
于 2012-09-12T14:52:29.090 に答える