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

SQLサーバー上のリンクテーブルに追加するときにAccessが間違ったIDを使用しないようにする

    ODBCトレースは、Accessが実際にSELECT @@IDENTITYを呼び出していることを示しています (SCOPE_IDENTITY()とは対照的 )SQL Serverリンクテーブルに行を挿入した後:

    Database1       e00-1490    EXIT  SQLExecDirectW  with return code 0 (SQL_SUCCESS)
            HSTMT               0x00000000004D6990
            WCHAR *             0x000000000F314F28 [      -3] "INSERT INTO  "dbo"."Table1"  ("txt") VALUES (?)\ 0"
            SDWORD                    -3
    
    ...
    
    Database1       e00-1490    EXIT  SQLExecDirectW  with return code 0 (SQL_SUCCESS)
            HSTMT               0x00000000004D6990
            WCHAR *             0x000007FED7E6EE58 [      -3] "SELECT @@IDENTITY\ 0"
            SDWORD                    -3
    

    さらに、MySQL Connector / ODBCを使用した同様のテストでは、Accessが対応するMySQL関数LAST_INSERT_ID()を呼び出さないことが示されているため、この動作は使用されているODBCドライバーに依存しているようです。 MySQLリンクテーブルに行を挿入した後。

    AccessがSELECT @@IDENTITYを呼び出していると仮定します 、トリガーを次のように変更する必要があります(ソース:ここ )@@IDENTITY値を元の値にリセットする

    create trigger mytable_insert_trigger on mytable for insert as
    
    declare @identity int
    declare @strsql varchar(128)
    
    set @[email protected]@identity
    --your code
    --insert into second table ...
    --your code
    set @strsql='select identity (int, ' + cast(@identity as varchar(10)) + ',1) as id into #tmp'
    execute (@strsql)
    


    1. 修正方法「from句のバルク行セットに相関名を指定する必要があります。」 SQLServerで

    2. Oracleストアドプロシージャとカスタムデータ型

    3. djangoテストアプリエラー-テストデータベースの作成中にエラーが発生しました:データベースの作成が許可されていません

    4. plsqlを使用せず、またデュアルを使用せずに、string(VARCHAR2)oraclesqlから文字を1つずつ印刷する