sql >> データベース >  >> RDS >> Sqlserver

@@IDENTITY が null を返さない場合、SCOPE_IDENTITY はどのように null を返すことができますか?

    以下は、SCOPE_IDENTITY() が null になるが、@@IDENTITY には値が含まれる例です:

    参考までに、SCOPE_IDENTITY() には既知のバグがあります:https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

    ID に関する最善の策は、OUTPUT INTO を使用することです。これは一連の ID を取得でき、SCOPE_IDENTITY() バグの影響を受けません:

    declare @x table (tableID int identity not null primary key, datavalue varchar(10))
    declare @y table (tableID int, datavalue varchar(10))
    
    INSERT INTO @x values ('aaaa')
    INSERT INTO @x values ('bbbb')
    INSERT INTO @x values ('cccc')
    INSERT INTO @x values ('dddd')
    INSERT INTO @x values ('eeee')
    
    
    INSERT INTO @x
        (datavalue)
        OUTPUT INSERTED.tableID, INSERTED.datavalue     --<<<<OUTPUT INTO SYNTAX
        INTO @y                                         --<<<<OUTPUT INTO SYNTAX
    SELECT
        'value='+CONVERT(varchar(5),dt.NewValue)
        FROM (SELECT id as NewValue from sysobjects where id<20) dt
        ORDER BY dt.NewValue
    
    
    select * from @x
    select * from @y
    


    1. TransactionScope.Complete() が呼び出されない場合でも、ネストされたトランザクションがコミットされるのはなぜですか?

    2. Spring Batch:IDをインクリメントできませんでした。ネストされた例外はcom.microsoft.sqlserver.jdbc.SQLServerExceptionです:無効なオブジェクト名'BATCH_JOB_SEQ'?

    3. T-SQLは階層内のルートノードを取得します

    4. MySQL IFNULL N / Aは、コレクションにアイテムが見つかりませんエラーを生成します