다음을 통해 공유


데이터베이스 참조 개요

적용 대상: Microsoft Fabric의 SQL ServerAzure SQL Database Azure SQL Managed Instance SQL 데이터베이스

SQL 프로젝트의 데이터베이스 참조를 사용하면 다른 프로젝트, .dacpac 파일 또는 게시된 NuGet 패키지에 연결하여 프로젝트에 포함되지 않은 개체를 통합할 수 있습니다. 프로젝트에 추가된 데이터베이스 개체는 동일한 데이터베이스, 동일한 서버의 다른 데이터베이스 또는 다른 서버의 다른 데이터베이스에 속할 수 있습니다. SQL Server 개발의 경우 데이터베이스 참조를 사용하여 세 부분으로 구성된 이름을 지정하기 위해 동일한 서버의 다른 데이터베이스에 연결하거나 데이터베이스 간 쿼리를 위해 다른 서버의 다른 데이터베이스에 연결할 수 있습니다. 고유 그룹의 개체 수가 많은 데이터베이스의 경우 데이터베이스 참조를 사용하여 데이터베이스를 더 작고 관리하기 쉬운 프로젝트로 분할할 수 있습니다. 프로젝트 크기가 작을수록 성능을 향상시키고 반복적인 로컬 개발 중에 프로젝트를 빌드하는 데 필요한 시간을 줄일 수 있습니다.

dacpac, nuget 패키지 및 데이터베이스 참조용 프로젝트를 참조하는 SQL 프로젝트의 예제 스크린샷

참고 항목

프로젝트 참조 및 NuGet 패키지 참조는 새 개발에서 데이터베이스 참조에 권장되는 방법입니다. NuGet 패키지 참조는 기존 SQL 프로젝트에서 지원되지 않습니다.

SQL 프로젝트 파일 샘플 및 구문

데이터베이스 참조는 C# 프로젝트와 유사하게 .sqlproj 파일의 항목을 통해 프로젝트에 포함됩니다. 데이터베이스 참조가 동일한 서버의 다른 데이터베이스에 대한 것인 경우 <DatabaseSqlCmdVariable> 요소가 프로젝트 참조에 포함됩니다. 데이터베이스 참조가 다른 서버의 다른 데이터베이스에 대한 것인 경우 <ServerSqlCmdVariable> 요소 또한 프로젝트 참조에 포함됩니다. 동일한 데이터베이스에 대한 데이터베이스 참조에는 <ServerSqlCmdVariable> 또는 <DatabaseSqlCmdVariable> 요소가 포함되지 않습니다.

SQL 스크립트에 데이터베이스 참조에 대한 특정 참조를 포함하는 경우 프로젝트 파일에 명명된 SQLCMD 변수를 사용하여 데이터베이스 이름을 지정합니다. 예를 들어 다음 SQL 스크립트는 Warehouse 데이터베이스의 테이블을 참조합니다.

SELECT ProductId, StorageLocation, BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory]

$(Warehouse) SQLCMD 변수에 해당하는 데이터베이스 참조가 프로젝트 파일에 포함되며 <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>이(가) 포함됩니다.

프로젝트 참조

이 예제에서는 동일한 데이터베이스의 일부인 SQL 프로젝트 AdventureWorksSalesLT.sqlproj에 프로젝트 참조가 추가됩니다.

  <ItemGroup>
    <ProjectReference Include="..\AdventureWorks\AdventureWorksSalesLT.sqlproj">
      <Name>AdventureWorksSalesLT</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <Private>True</Private>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
    </ProjectReference>
  </ItemGroup>

Dacpac 패키지 참조

SQL 프로젝트의 패키지 참조에 대한 자세한 내용은 SQL 프로젝트 패키지 참조 문서에서 찾을 수 있습니다 .

SQL 2022용 master 시스템 데이터베이스에 대한 패키지 참조는 다음 예제에 나와 있습니다.

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
  </ItemGroup>

Dacpac 아티팩트 참조

.dacpac 아티팩트 파일에 대한 참조는 SDK 스타일 프로젝트의 새 개발에는 권장되지 않습니다. 대신 NuGet 패키지 참조를 사용합니다.

원래 SQL 프로젝트에서 .dacpac 파일 참조는 <ArtifactReference> 항목이 있는 .sqlproj 파일에 지정됩니다. 다음 예제에서는 동일한 서버의 다른 프로젝트에 있는 .dacpac 파일에 대한 .dacpac 아티팩트 참조를 보여줍니다.

  <ItemGroup>
    <ArtifactReference Include="..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac">
      <HintPath>..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac</HintPath>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>

프로젝트 참조 추가 및 사용

프로젝트 참조 추가

Visual Studio에서 SQL 프로젝트에 프로젝트 참조를 추가하려면 솔루션 탐색기 프로젝트의 참조 노드를 마우스 오른쪽 단추로 클릭하고 데이터베이스 참조 추가를 선택합니다.

데이터베이스 참조를 위한 Visual Studio 대화 상자 스크린샷.

데이터베이스 참조 추가 대화 상자에는 참조를 추가하는 옵션이 표시됩니다.

  • 동일한 솔루션의 SQL 프로젝트
  • 시스템 데이터베이스(Visual Studio에 자동으로 포함된 .dacpac 파일으로부터)
  • 로컬 파일 시스템의 모든 데이터 계층 애플리케이션 (.dacpac) 파일

이 대화 상자는 다음 참조 위치에서 선택할 수 있는 드롭다운 목록도 제공합니다.

  • 동일한 데이터베이스
  • 다른 데이터베이스, 동일한 서버
  • 다른 데이터베이스, 다른 서버

SQL 프로젝트에 프로젝트 참조를 추가하려면 각 데이터베이스 참조에 대한 적절한 참조 항목이 있는 <ItemGroup> 항목을 .sqlproj 파일에 추가합니다. 예를 들어 다음 프로젝트 참조는 다른 서버의 다른 데이터베이스에 있는 WorldWideImporters 프로젝트를 참조하기 위해 SQL 프로젝트에 추가됩니다.

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

프로젝트 참조는 SQL 프로젝트의 샘플 뷰 정의에서 사용됩니다.

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

SQL Database 프로젝트 확장의 SQL 프로젝트에 데이터베이스 참조를 추가하려면 데이터베이스 프로젝트 보기에서 프로젝트 아래의 데이터베이스 참조 노드를 마우스 오른쪽 단추로 클릭하고 데이터베이스 참조 추가를 선택합니다.

Azure Data Studio의 참조 추가 대화 상자 스크린샷.

사용 가능한 참조 형식은 다음과 같습니다.

  • 시스템 데이터베이스
  • 데이터 계층 애플리케이션 (.dacpac)
  • 게시된 데이터 계층 애플리케이션 (.nupkg)
  • project

또한 확장은 다음 참조 위치에서 선택하라는 메시지를 표시합니다.

  • 동일한 데이터베이스
  • 다른 데이터베이스, 동일한 서버
  • 다른 데이터베이스, 다른 서버

SQL 프로젝트에 프로젝트 참조를 추가하려면 각 데이터베이스 참조에 대한 적절한 참조 항목이 있는 <ItemGroup> 항목을 .sqlproj 파일에 추가합니다. 예를 들어 다음 프로젝트 참조는 다른 서버의 다른 데이터베이스에 있는 WorldWideImporters 프로젝트를 참조하기 위해 SQL 프로젝트에 추가됩니다.

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

프로젝트 참조는 SQL 프로젝트의 샘플 뷰 정의에서 사용됩니다.

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

프로젝트 참조를 사용하여 빌드

데이터베이스 참조를 사용하여 SQL 프로젝트를 빌드하려면 빌드 프로세스 중에 참조된 개체를 사용할 수 있도록 추가 구성이 필요할 수 있습니다. 예를 들어 프로젝트가 CI(연속 통합) 파이프라인에서 빌드되는 경우 빌드 에이전트 환경을 로컬 개발 환경과 유사하게 설정해야 합니다.

  • SQL 프로젝트의 .dacpac 참조를 사용하려면 프로젝트 파일에 지정된 것과 동일한 상대 파일 경로의 빌드 에이전트에 .dacpac이(가) 존재해야 합니다.
  • SQL 프로젝트의 프로젝트 참조를 사용하려면 참조된 프로젝트가 프로젝트 파일에 지정된 것과 동일한 상대 파일 경로에 있는 빌드 에이전트에 있어야 하며 빌드 에이전트에서 성공적으로 빌드할 수 있어야 합니다.
  • Visual Studio의 원래 SQL 프로젝트에서 만든 시스템 데이터베이스 참조를 사용하려면 빌드 에이전트에 Visual Studio가 설치되어 있어야 합니다.
  • SQL 프로젝트의 NuGet 패키지 참조를 사용하려면 빌드 에이전트의 패키지 원본으로도 설정된 NuGet 피드에 패키지를 게시해야 합니다.

프로젝트 참조를 사용하여 게시

데이터베이스 참조를 사용하여 프로젝트에서 빌드된 .dacpac 빌드를 게시하려면 추가 단계가 필요하지 않습니다. .dacpac 파일에는 참조된 개체와 프로젝트 파일에 지정된 SQLCMD 변수가 포함됩니다.

동일한 데이터베이스의 개체에 대한 데이터베이스 참조의 경우 참조된 프로젝트의 개체가 .dacpac 파일에 포함되지만 기본적으로 배포에는 포함되지 않습니다. 배포에 개체를 포함하려면 SqlPackage 명령줄 도구의 /p:IncludeCompositeObjects=true 옵션을 사용합니다. 예를 들어 다음 명령은 데이터베이스 참조의 개체를 AdventureWorks에 포함하는 AdventureWorks 옵션을 사용하여 /p:IncludeCompositeObjects=true 프로젝트를 배포합니다.

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true

데이터베이스 참조가 있는 .dacpac 파일을 다른 데이터베이스(동일 또는 다른 서버)에 배포하는 경우 프로젝트 파일에 지정된 SQLCMD 변수를 대상 환경에 대한 올바른 값으로 설정해야 합니다. 배포 중에 SQLCMD 변수 값 설정은 SqlPackage 명령줄 도구의 /v 옵션으로 수행됩니다. 예를 들어 다음 명령은 WorldWideImporters 변수를 WorldWideImporters으(로) 설정하고 WWIServer 변수를 localhost으(로) 설정합니다.

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost