Usar projetos SQL no estilo SDK com a extensão Projetos do Banco de Dados SQL (Visualização)
Este artigo apresenta Microsoft.Build.Sql para projetos SQL no estilo SDK na extensão Projetos do Banco de Dados SQL no Azure Data Studio ou Visual Studio Code. Projetos SQL no estilo SDK são especialmente vantajosos para aplicativos enviados por pipelines ou criados em ambientes de plataforma cruzada. O anúncio inicial está disponível na TechCommunity.
Nota
Microsoft.Build.Sql está atualmente em visualização.
Criar um projeto de banco de dados no estilo SDK
Você pode criar um projeto de banco de dados no estilo SDK a partir de um projeto em branco ou de um banco de dados existente.
Projeto em branco
Na visualização Projetos de Banco de Dados, selecione o botão Novo Projeto e insira um nome de projeto na entrada de texto exibida. Na caixa de diálogo Selecionar uma pasta exibida, escolha um diretório para a pasta, .sqlproj
o arquivo e outros conteúdos do projeto para residir.
Por padrão, a seleção para projeto no estilo SDK (Visualização) é marcada. Quando a caixa de diálogo é concluída, o projeto vazio é aberto e visível na visualização Projetos de Banco de Dados para edição.
A partir de uma base de dados existente
Na visualização Projeto, selecione o botão Criar projeto do banco de dados e conecte-se a um SQL Server. Uma vez estabelecida a conexão, selecione um banco de dados na lista de bancos de dados disponíveis e defina o nome do projeto. Selecione uma estrutura de destino da extração.
Por padrão, a seleção para projeto no estilo SDK (Visualização) é marcada. Quando a caixa de diálogo é concluída, o novo projeto é aberto e contém scripts SQL para o conteúdo do banco de dados selecionado.
Criar e publicar
Nas interfaces do Azure Data Studio e do Visual Studio Code, a criação e a publicação de um projeto SQL no estilo SDK são concluídas da mesma forma que o formato de projeto SQL anterior. Para obter mais informações sobre esse processo, consulte Criar e publicar um projeto.
Para criar um projeto SQL no estilo SDK a partir da linha de comando no Windows, macOS ou Linux, use o seguinte comando:
dotnet build
O .dacpac
arquivo resultante da criação de um projeto SQL no estilo SDK é compatível com ferramentas associadas à estrutura de aplicativo da camada de dados (.dacpac
, .bacpac
), incluindo SqlPackage e GitHub sql-action.
Capacidades do projeto
Em projetos SQL, há vários recursos que podem ser especificados no .sqlproj
arquivo que afetam o modelo de banco de dados na compilação ou implantação do projeto. As seções a seguir descrevem alguns desses recursos que estão disponíveis para projetos Microsoft.Build.Sql.
Plataforma de destino
A propriedade da plataforma de destino está contida na DSP
tag no .sqlproj
arquivo sob o <PropertyGroup>
item. A plataforma de destino é usada durante a compilação do projeto para validar o suporte para recursos incluídos no projeto e é adicionada .dacpac
ao arquivo como uma propriedade. Por padrão, durante a implantação, a plataforma de destino é verificada em relação ao banco de dados de destino para garantir a compatibilidade. Se a plataforma de destino não for suportada pelo banco de dados de destino, a implantação falhará a menos que uma opção de publicação de substituição seja especificada.
<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>
As configurações válidas para a plataforma de destino são:
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
Referências de bases de dados
A validação do modelo de banco de dados em tempo de compilação pode ser estendida além do conteúdo do projeto SQL por meio de referências de banco de dados. As referências de banco de dados especificadas no arquivo podem fazer referência a .sqlproj
outro projeto SQL ou a um .dacpac
arquivo, representando outro banco de dados ou mais componentes do mesmo banco de dados.
Os seguintes atributos estão disponíveis para referências de banco de dados que representam outro banco de dados:
- DatabaseSqlCmdVariable: o valor é o nome da variável usada para fazer referência ao banco de dados
- Definição de referência:
<DatabaseSqlCmdVariable>SomeOtherDatabase</DatabaseSqlCmdVariable>
- Exemplo de uso:
SELECT * FROM [$(SomeOtherDatabase)].dbo.Table1
- Definição de referência:
- ServerSqlCmdVariable: o valor é o nome da variável usada para fazer referência ao servidor onde reside o banco de dados. usado com DatabaseSqlCmdVariable, quando o banco de dados está em outro servidor.
- Definição de referência:
<ServerSqlCmdVariable>SomeOtherServer</ServerSqlCmdVariable>
- Exemplo de uso:
SELECT * FROM [$(SomeOtherServer)].[$(SomeOtherDatabase)].dbo.Table1
- Definição de referência:
- DatabaseVariableLiteralValue: o valor é o nome literal do banco de dados usado no projeto SQL, semelhante a
DatabaseSqlCmdVariable
mas a referência a outro banco de dados é um valor literal- Definição de referência:
<DatabaseVariableLiteralValue>SomeOtherDatabase</DatabaseVariableLiteralValue>
- Exemplo de uso:
SELECT * FROM [SomeOtherDatabase].dbo.Table1
- Definição de referência:
Em um arquivo de projeto SQL, uma referência de banco de dados é especificada como um ArtifactReference
item com o Include
atributo definido para o caminho do .dacpac
arquivo.
<ItemGroup>
<ArtifactReference Include="SampleA.dacpac">
<DatabaseSqlCmdVariable>DatabaseA</DatabaseSqlCmdVariable>
</ArtifactReference>
</ItemGroup>
</Project>
Referências de pacotes
As referências de pacote são usadas para fazer referência a pacotes NuGet que contêm um .dacpac
arquivo e são usadas para estender o modelo de banco de dados em tempo de compilação da mesma forma que uma referência de banco de dados.
O exemplo a seguir de um arquivo de projeto SQL faz referência ao Microsoft.SqlServer.Dacpacs
pacote para o master
banco de dados.
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0" />
</ItemGroup>
</Project>
Além dos atributos disponíveis para referências de banco de dados, o atributo a seguir DacpacName
pode ser especificado para selecionar um .dacpac
de um pacote que contém vários .dacpac
arquivos.
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0">
<DacpacName>msdb</DacpacName>
</PackageReference>
</ItemGroup>
</Project>
Variáveis SqlCmd
As variáveis SqlCmd podem ser definidas no arquivo e são usadas para substituir tokens em objetos e scripts SQL durante .dacpac
a .sqlproj
implantação. O exemplo a seguir de um arquivo de projeto SQL define uma variável chamada EnvironmentName
que está disponível para uso nos objetos e scripts do projeto.
<ItemGroup>
<SqlCmdVariable Include="EnvironmentName">
<DefaultValue>testing</DefaultValue>
<Value>$(SqlCmdVar__1)</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>
IF '$(EnvironmentName)' = 'testing'
BEGIN
-- do something
END
Quando um projeto SQL compilado (.dacpac
) é implantado, o valor da variável é substituído pelo valor especificado no comando deployment. Por exemplo, o comando a seguir implanta o AdventureWorks.dacpac
e define o valor da EnvironmentName
variável como production
.
SqlPackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:EnvironmentName=production
Scripts pré/pós-implantação
Os scripts pré e pós-implantação são scripts SQL incluídos no projeto a ser executado durante a implantação. Os scripts pré/pós-implantação estão incluídos no mas não são compilados ou validados com o .dacpac
modelo de objeto de banco de dados. Um script de pré-implantação é executado antes que o modelo de banco de dados seja aplicado e um script de pós-implantação é executado depois que o modelo de banco de dados é aplicado. O exemplo a seguir de um arquivo de projeto SQL adiciona o arquivo populate-app-settings.sql
como script pós-implantação.
<ItemGroup>
<PostDeploy Include="populate-app-settings.sql" />
</ItemGroup>
</Project>