localdb RESTORE SQL は Win 10 ボックスでは動作しますが、Azure パイプライン エージェントでは動作しません

localdb RESTORE SQL は Win 10 ボックスでは動作しますが、Azure パイプライン エージェントでは動作しません

統合テストの実行を拒否する Azure パイプラインがあります (テストを実行する前に、.bak ファイルから必要なデータベースを作成する必要がありますが、これが失敗している部分です)

この SQL は、MSTestClassInitializeルーチンの一部として呼び出されます。

IF DB_ID('saleslogix_full') IS NOT NULL
    BEGIN

      ALTER DATABASE [saleslogix_full] SET SINGLE_USER WITH
      ROLLBACK IMMEDIATE;

      DROP DATABASE [saleslogix_full];

    END

restore database saleslogix_full
from disk = 'C:\x\y\z\data-snapshots\saleslogix_full.bak' with Recovery,
move 'saleslogix_full' to 'C:\x\y\z\saleslogix_full.mdf',
move 'saleslogix_full_log' to 'C:\x\y\z\saleslogix_full_log.ldf'

上記は、サーバーの「マスター」データベースに接続することによって呼び出されます。繰り返しますが、Visual Studio 2019 を実行している「私のマシンでは動作します」。ただし(localdb)\MSSQLLocal、次の Azure エージェントのいずれでも動作しません。windows-2019vs2017-win2016


追加の詳細 - Azure エージェント ログ スニペット

A total of 6 test files matched the specified pattern.
  X SeededSuccessfully_SalesforceIntegration
  Error Message:
   Class Initialization method MyCorp.Data.ReplicationWorker.Tests.Test1.ClassInit threw exception. System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: Cannot create more than one clustered index on table 'dbo.sysschemaarticles'. Drop the existing clustered index 'PK_dbo.sysschemaarticles' before creating another.
Database 'saleslogix_full' was restored, however an error was encountered while replication was being restored/removed. The database has been left offline. See the topic MSSQL_ENG003165 in SQL Server Books Online.
RESTORE DATABASE is terminating abnormally.
Processed 1120 pages for database 'saleslogix_full', file 'saleslogix_full' on file 1.
Processed 2 pages for database 'saleslogix_full', file 'saleslogix_full_log' on file 1..

さて、上記のログ メッセージに埋もれている宝石は次のとおりです。 Cannot create more than one clustered index on table 'dbo.sysschemaarticles'. Drop the existing clustered index 'PK_dbo.sysschemaarticles' before creating another

これをどうやって行うか調べる前に、誰か私に方向性を示してもらえますか?これは Windows 10 ボックスでは機能するのに、Azure パイプライン エージェントでは機能しないのはなぜですか?私の最初の直感は、これは「localdb」SQLエディションの違いだと言うことです。

答え1

結局、try{...}catch{..}SQL ステートメントの爆発の原因となっていた .NET コードの周囲に を配置しました。

catchはSystem.Data.SqlClient.SqlExceptionエラーに特有のものである

catch 内で、次の SQL を実行します。

"ALTER DATABASE saleslogix_full SET ONLINE"

そして、すべての統合テストはデータベースに対して合格したようです

関連情報