localdb RESTORE SQL은 내 Win 10 상자에서 작동하지만 내 Azure 파이프라인 에이전트에서는 작동하지 않습니다.

localdb RESTORE SQL은 내 Win 10 상자에서 작동하지만 내 Azure 파이프라인 에이전트에서는 작동하지 않습니다.

통합 테스트 실행을 거부하는 Azure 파이프라인이 있습니다. 테스트를 실행하기 전에 .bak 파일에서 필요한 데이터베이스를 생성해야 하는데 이것이 바로 실패하는 부분입니다.

이 SQL은 MSTest 루틴의 일부로 호출됩니다 ClassInitialize.

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'

위의 내용은 서버의 '마스터' 데이터베이스에 연결하여 호출됩니다 (localdb)\MSSQLLocal. 다시 말하지만, Visual Studio 2019를 실행하는 "내 컴퓨터에서 작동합니다". windows-2019그러나 다음 Azure 에이전트 중 하나에서는 작동하지 않습니다.vs2017-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 코드를 배치 했습니다 .

System.Data.SqlClient.SqlException캐치는 오류 에 따라 다릅니다.

catch 내에서 다음 SQL을 실행합니다.

"ALTER DATABASE saleslogix_full SET ONLINE"

그리고 모든 통합 테스트가 데이터베이스에 대해 통과한 것 같습니다.

관련 정보