SQL Database Projects 확장(미리 보기)에서 SDK 스타일 SQL 프로젝트 사용

이 문서에서는 Azure Data Studio 또는 Visual Studio Code의 SQL Database 프로젝트 확장에서 SDK 스타일 SQL 프로젝트용 Microsoft.Build.Sql 을 소개합니다. SDK 스타일 SQL 프로젝트는 파이프라인을 통해 제공되거나 플랫폼 간 환경에서 빌드된 애플리케이션에 특히 유용합니다. 초기 공지는 TechCommunity에서 제공됩니다.

참고 항목

Microsoft.Build.Sql은 현재 미리 보기로 제공됩니다.

SDK 스타일 데이터베이스 프로젝트 만들기

빈 프로젝트 또는 기존 데이터베이스에서 SDK 스타일 데이터베이스 프로젝트를 만들 수 있습니다.

빈 프로젝트

데이터베이스 프로젝트 보기에서 새 프로젝트 단추를 선택하고 표시되는 텍스트 입력에 프로젝트 이름을 입력합니다. 표시되는 폴더 선택 대화상자에서 프로젝트의 폴더, .sqlproj 파일 및 기타 콘텐츠가 상주할 디렉터리를 선택합니다.

기본적으로 SDK 스타일 프로젝트(미리 보기) 에 대한 선택 항목이 선택되어 있습니다. 대화 상자가 완료되면 빈 프로젝트가 열리고 편집을 위해 데이터베이스 프로젝트 보기에 표시됩니다.

기존 데이터베이스에서

프로젝트 보기에서 데이터베이스에서 프로젝트 만들기 단추를 선택하고 SQL Server에 연결합니다. 연결되면 사용 가능한 데이터베이스 목록에서 데이터베이스를 선택하고 프로젝트 이름을 설정합니다. 추출의 대상 구조를 선택합니다.

기본적으로 SDK 스타일 프로젝트(미리 보기) 에 대한 선택 항목이 선택되어 있습니다. 대화 상자가 완료되면 새 프로젝트가 열리고 선택한 데이터베이스의 콘텐츠에 대한 SQL 스크립트가 포함됩니다.

빌드 및 게시

Azure Data Studio 및 Visual Studio Code 인터페이스에서 SDK 스타일 SQL 프로젝트 빌드 및 게시는 이전 SQL 프로젝트 형식과 동일한 방식으로 완료됩니다. 이 프로세스에 대한 자세한 내용은 프로젝트 빌드 및 게시를 참조하세요.

Windows, macOS 또는 Linux의 명령줄에서 SDK 스타일 SQL 프로젝트를 빌드하려면 다음 명령을 사용합니다.

dotnet build

SDK 스타일 SQL 프로젝트 빌드로 인한 파일은 SqlPackage 및 GitHub sql-action을 포함하여 데이터 계층 애플리케이션 프레임워크(.dacpac.bacpac)와 연결된 도구와 호환됩니다..dacpac

프로젝트 기능

SQL 프로젝트에는 프로젝트 빌드 또는 배포 시 .sqlproj 데이터베이스 모델에 영향을 주는 여러 기능을 파일에 지정할 수 있습니다. 다음 섹션에서는 Microsoft.Build.Sql 프로젝트에 사용할 수 있는 이러한 기능 중 일부에 대해 설명합니다.

대상 플랫폼

대상 플랫폼 속성은 항목 아래 파일의 DSP.sqlproj 태그에 포함됩니다 <PropertyGroup> . 대상 플랫폼은 프로젝트 빌드 중에 프로젝트에 포함된 기능에 대한 지원의 유효성을 검사하는 데 사용되며 파일에 속성으로 추가 .dacpac 됩니다. 기본적으로 배포하는 동안 대상 플랫폼은 호환성을 보장하기 위해 대상 데이터베이스에 대해 검사. 대상 데이터베이스에서 대상 플랫폼을 지원하지 않는 경우 재정 의 게시 옵션을 지정하지 않으면 배포가 실패합니다.

<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.1.12-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider</DSP>
  </PropertyGroup>

대상 플랫폼에 대한 유효한 설정은 다음과 같습니다.

  • Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlDwDatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlServerlessDatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlDwUnifiedDatabaseSchemaProvider

데이터베이스 참조

빌드 시 데이터베이스 모델 유효성 검사는 데이터베이스 참조를 통해 SQL 프로젝트의 내용을 지나 확장할 수 있습니다. 파일에 지정된 .sqlproj 데이터베이스 참조는 다른 SQL 프로젝트 또는 파일을 참조하여 다른 데이터베이스 또는 .dacpac 동일한 데이터베이스의 더 많은 구성 요소를 나타낼 수 있습니다.

다음 특성은 다른 데이터베이스를 나타내는 데이터베이스 참조에 사용할 수 있습니다.

  • DatabaseSqlCmdVariable: 값은 데이터베이스를 참조하는 데 사용되는 변수의 이름입니다.
    • 참조 설정: <DatabaseSqlCmdVariable>SomeOtherDatabase</DatabaseSqlCmdVariable>
    • 사용 예제: SELECT * FROM [$(SomeOtherDatabase)].dbo.Table1
  • ServerSqlCmdVariable: 값은 데이터베이스가 있는 서버를 참조하는 데 사용되는 변수의 이름입니다. 데이터베이스가 다른 서버에 있는 경우 DatabaseSqlCmdVariable과 함께 사용됩니다.
    • 참조 설정: <ServerSqlCmdVariable>SomeOtherServer</ServerSqlCmdVariable>
    • 사용 예제: SELECT * FROM [$(SomeOtherServer)].[$(SomeOtherDatabase)].dbo.Table1
  • DatabaseVariableLiteralValue: 값은 SQL 프로젝트에서 DatabaseSqlCmdVariable 사용되는 데이터베이스의 리터럴 이름이지만 다른 데이터베이스에 대한 참조는 리터럴 값입니다.
    • 참조 설정: <DatabaseVariableLiteralValue>SomeOtherDatabase</DatabaseVariableLiteralValue>
    • 사용 예제: SELECT * FROM [SomeOtherDatabase].dbo.Table1

SQL 프로젝트 파일에서 데이터베이스 참조는 특성이 파일 경로 .dacpacInclude 설정된 항목으로 ArtifactReference 지정됩니다.

  <ItemGroup>
    <ArtifactReference Include="SampleA.dacpac">
      <DatabaseSqlCmdVariable>DatabaseA</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>
</Project>

패키지 참조

패키지 참조는 파일이 포함된 .dacpac NuGet 패키지를 참조하는 데 사용되며 빌드 시 데이터베이스 모델을 데이터베이스 참조유사하게 확장하는 데 사용됩니다.

SQL 프로젝트 파일의 다음 예제에서는 데이터베이스에 Microsoft.SqlServer.Dacpacs대한 master 패키지를 참조합니다.

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0" />
  </ItemGroup>
</Project>

데이터베이스 참조에 사용할 수 있는 특성 외에도 다음 DacpacName 특성을 지정하여 여러 .dacpac 파일이 포함된 패키지에서 선택할 .dacpac 있습니다.

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0">
      <DacpacName>msdb</DacpacName>
    </PackageReference>
  </ItemGroup>
</Project>

SqlCmd 변수

SqlCmd 변수는 파일에서 .sqlproj 정의할 수 있으며 배포 중에 .dacpacSQL 개체 및 스크립트의 토큰을 바꾸는 데 사용됩니다. SQL 프로젝트 파일의 다음 예제에서는 프로젝트의 개체 및 스크립트에서 사용할 수 있는 명명된 EnvironmentName 변수를 정의합니다.

  <ItemGroup>
    <SqlCmdVariable Include="EnvironmentName">
      <DefaultValue>testing</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>
IF '$(EnvironmentName)' = 'testing'
BEGIN
    -- do something
END

컴파일된 SQL 프로젝트(.dacpac)가 배포되면 변수 값이 배포 명령에 지정된 값으로 바뀝니다. 예를 들어 다음 명령은 변수 값을 AdventureWorks.dacpac 배포하고 변수 production값을 EnvironmentName .로 설정합니다.

SqlPackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:EnvironmentName=production

배포 전/후 스크립트

배포 전 및 배포 후 스크립트는 배포 중에 실행할 프로젝트에 포함된 SQL 스크립트입니다. 배포 전/후 스크립트는 해당 스크립트에 .dacpac 포함되지만 데이터베이스 개체 모델로 컴파일되거나 유효성이 검사되지 않습니다. 배포 전 스크립트는 데이터베이스 모델이 적용되기 전에 실행되고 데이터베이스 모델이 적용된 후 배포 후 스크립트가 실행됩니다. SQL 프로젝트 파일의 다음 예제에서는 배포 후 스크립트로 파일을 populate-app-settings.sql 추가합니다.

  <ItemGroup>
    <PostDeploy Include="populate-app-settings.sql" />
  </ItemGroup>
</Project>

다음 단계