0

テーブルの主キー(varchar)を挿入するための挿入トリガーがあります。最後に挿入された主キーの値を取得したいと思います。これらは私の挿入トリガーです

   ALTER TRIGGER dbo.equipment_insert_pk 
     ON  dbo.Equipment 
     INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    declare @id int;
    declare @cat varchar(2);
    select @cat=CategoryID from INSERTED;
    select @id=cast(max(right(EquipmentID,4)) as int) from Equipment where CategoryID=@cat;
    set @id=isnull(@id,0)+1;
    -- Insert statements for trigger here
    insert into Equipment
    select CategoryID+right('0000'+cast(@id as varchar(4)),4)
    ,CategoryID
    ,Location
    ,Detail
    ,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg'  from INSERTED;

END

最後に挿入された主キー値をフェッチする関数を作成しようとしましたが、トリガーの外部に「挿入された」スコープがないため、機能しないようです。ヘルプを参照してください。遠い..

insert into Equipment 
    output INSERTED.EquipmentID into @Temp_Tbl
    select CategoryID+right('0000'+cast(@id as varchar(4)),4)
    ,CategoryID
    ,Location
    ,Detail
    ,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg'  from INSERTED;

何か助けは??

4

1 に答える 1

1

わかった。数週間前、まったく同じ問題に遭遇しました。

私はさまざまな方法を試しましたが、役に立ちませんでした。UNIQUEIDENTIFIER簡単に言えば、 (guid)のタイプの新しい列を追加することになりました

guidあなたの例を使用するために - と呼ばれる列があるとしましょうdbo.Equipment

大まかに、次のようにします。

insert into Equipment 
    output INSERTED.EquipmentID, INSERTED.guid into @Temp_Tbl
    select CategoryID+right('0000'+cast(@id as varchar(4)),4)
    ,CategoryID
    ,Location
    ,Detail
    ,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg'
    ,NEWID() -- new column

挿入済みから;

次に、挿入された ID を取得するためにクエリdbo.Equipmentを実行できます。@Temp_Tbl.guid例えば:

SELECT EquipmentID FROM dbo.Equipment e WHERE EXISTS (SELECT * FROM @Temp_Tbl tt WHERE tt.guid = e.guid)

于 2012-04-18T14:36:14.397 に答える