1

SQL Azure Data Syncを使用して、SQL-Azure-DB とオンプレミスの SQL-Server 2008R2 を同期しようとしています。

現在は 90 行しかないテーブルを 1 つだけ同期する必要があります。Azure 側のテーブルにはトリガー セットがありますが、ローカル SQL サーバーのテーブルにはこのトリガーがありません (共有されている 1 つのテーブルを除いて、2 つのデータベースには共通点がないため)。

同期しようとすると、次のエラーで失敗します。

Sync failed with the exception "GetStatus failed with exception:
Sync worker failed, checked by GetStatus method.

Failure details:
An unexpected error occurred when applying batch file C:\Resources\directory\61e9d741c80a47b4ae195f835e62fcda.NTierSyncServiceWorkerRole.LS1\DSS_syncjobmxd24sznwfq5idekfaopaery\a0e8b11a-a08c-4081-b929-e3f80b70f045.batch.
See the inner exception for more details.

Inner exception:
Failed to execute the command 'BulkInsertCommand' for table 'dbo.tblUser';
the transaction was rolled back. Ensure that the command syntax is correct.

Inner exception:
SqlException Error Code: -2146232060 - SqlError Number:512,
Message: Subquery returned more than 1 value.
This is not permitted when the subquery follows =, !=, <, <= , >, >=
or when the subquery is used as an expression.

SqlError Number:3621,
Message: The statement has been terminated. 
For more information, provide tracing id ‘bb8e3787-27c1-4b7e-9a26-6db2ff6724d3’ to customer support.

トリガーを無効にすると、同期が機能します。

私のトリガー:

    CREATE TRIGGER [dbo].[UpdateUsersTable]
    ON [dbo].[tblUser]
    AFTER INSERT AS BEGIN SET NOCOUNT ON;

    INSERT INTO  [dbo].[Users] ([userID], [PartnerOrganizationId])
    VALUES ((select [userID] from inserted), (select [country] from inserted))
    END

アプローチとして、おそらくトリガーと同期トリガーが間違った順序で開始されるためだと思ったので、試しました:

    exec sp_settriggerorder @triggername = 'tblUser_dss_insert_trigger',
                        @order = 'first',
                        @stmttype = 'insert',
                        @namespace = null

    exec sp_settriggerorder @triggername = 'UpdateUsersTable',
                    @order = 'last',
                    @stmttype = 'insert',
                    @namespace = null
    go

しかし、それは何も変わりませんでした。それでも同じエラーです。

トリガーを有効にしてそのテーブルを同期する機会はありますか?

4

1 に答える 1

1

トリガーでは、この問題を引き起こしている INSERT を使用しています。

INSERT、UPDATE、および DELETE に対して個別のトリガーを作成してください。システムは、挿入されたテーブルと削除されたテーブルの行数を比較して、どのアクションがトリガーを起動するかを判断する必要があります。INSERT/DELETE に個別のトリガーを設定すると、この問題が解決するはずです。

同様の議論は、ここでまったく同じ問題を示しています

より詳しい情報

トリガーにはバグがあり、複数行の挿入では失敗します。次のようになります。

CREATE TRIGGER [dbo].[UpdateUsersTable]
ON [dbo].[tblUser]
AFTER INSERT AS BEGIN SET NOCOUNT ON;

INSERT INTO  [dbo].[Users] ([userID], [PartnerOrganizationId])
 select [userID], [country] from inserted
END
于 2012-05-18T17:51:47.910 に答える