-1

データベースにテーブル (ssis エラー処理とログ記録の一部として作成されたログ テーブル) があります。このテーブルに行を挿入し、scope_identity() を使用してテーブルから最後の ID 値を取得しようとしています。しかし、scope_identity?() に対してNULLを取得しています。1 つのストアド プロシージャの一部として使用されている dml ステートメントと scope_identity() ステートメントを参照してください。

insert into logging.execution_log
            (ParentLogID, Description, PackageName, PackageGuid, MachineName, ExecutionGuid, LogicalDate, Operator, StartTime, EndTime, Status,FailureTask)
        select @ParentLogID, @Description, @PackageName, cast(@PackageGuid as uniqueidentifier), @MachineName, cast(@ExecutionGuid as uniqueidentifier),
                @logicalDate, @operator, getdate(), null, @status, null



**set @LogID = cast(scope_identity() as int)**

しかし、@logidの値を取得しようとすると、nullのみが返されます

logging.execution_log テーブルのLogId列に ID 仕様が既にあることに注意してください。

よろしく

*追加の詳細(いくつかのテストを行ったときに理解しました) テストの一環として、次のようにいくつかの新しい行を手動で挿入しました、StartTime、EndTime、Status、FailureTask)

    select 1, 2, 3, **NEWID()**,
     5, **NEWID()**,
            7, 8, getdate(), null, 0, null

select scope_identity()
select * from logging.execution_log

次に、IDの最後の値を表示します..........それは問題ありませんが、問題は、PackageGuidをsystem::Packageid(ssisシステム変数)として渡し、ExecutionGuidをsystem ::executioninstanceGUIDとして渡すと、挿入されますテーブルの行は正しくありますが、scope_identi または @@identity または ident_current を使用して最後の ID 値を取得できません (すべてが null を示しています)*

4

2 に答える 2

1

output into 句を使用します。

insert into logging.execution_log
            (ParentLogID, Description, PackageName, PackageGuid, MachineName, ExecutionGuid, LogicalDate, Operator, StartTime, EndTime, Status,FailureTask)
        output LogID into @LogID
        select @ParentLogID, @Description, @PackageName, cast(@PackageGuid as uniqueidentifier), @MachineName, cast(@ExecutionGuid as uniqueidentifier),
                @logicalDate, @operator, getdate(), null, @status, null
于 2012-06-15T08:49:06.637 に答える
0
begin try
    Set XACT_ABORT ON
    BEGIN TRAn
            INSERT into logging.execution_log
                (ParentLogID, Description, PackageName, PackageGuid, MachineName, 
                ExecutionGuid, LogicalDate, Operator, StartTime, EndTime, Status,FailureTask)
            Values(@ParentLogID, @Description, @PackageName, 
                cast(@PackageGuid as uniqueidentifier), @MachineName, 
                cast(@ExecutionGuid as uniqueidentifier),  @logicalDate, 
                @operator, getdate(), null, @status, null)

            Set @LogID = scope_identity()
    Commit Tran
End try

Begin Catch
    Select Error_Message();
    Rollback Tran
End Catch
于 2012-06-15T09:06:27.297 に答える