SQL 数据库项目入门
适用于:SQL Server 2022 (16.x) Azure SQL 数据库 Azure SQL 托管实例
SQL 数据库项目是 SQL 对象的本地表示形式,这些对象包含了用于某一个数据库的架构(例如,表、存储过程或函数)。 SQL 数据库项目的开发周期使数据库开发能够集成到作为开发最佳做法所熟悉的持续集成和持续部署 (CI/CD) 工作流中。
本文逐步介绍如何创建新的 SQL 项目、向项目添加对象,以及生成和部署项目。 除了 Visual Studio (SQL Server Data Tools) 说明外,本指南重点介绍 SDK 样式的 SQL 项目。
先决条件
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
注意
若要完成 SQL 数据库项目的部署,需要访问 Azure SQL 或 SQL Server 实例的权限。 可以在 Windows 或容器上使用 SQL Server 开发者版本在本地进行免费开发。
步骤 1:创建新项目
在手动向项目添加对象之前,我们将通过创建新的 SQL 数据库项目来启动项目。 可通过其他方法创建一个项目,以便立即使用现有数据库中的对象填充项目,例如使用架构比较工具。
依次选择“文件”、“新建”和“项目”。
在“新建项目”对话框中,在搜索框中使用术语“SQL Server”。 最匹配的结果应该是 SQL Server 数据库项目。
选择下一步以继续执行下一步。 提供不需要与数据库名称匹配的项目名称。 根据需要验证和修改项目位置。
选择“创建”来创建项目。 空项目在“解决方案资源管理器”中打开并可见,可供编辑。
依次选择“文件”、“新建”和“项目”。
在“新建项目”对话框中,在搜索框中使用术语“SQL Server”。 最匹配的结果应是“SDK 式 SQL Server 数据库项目(预览版)”。
选择下一步以继续执行下一步。 提供不需要与数据库名称匹配的项目名称。 根据需要验证和修改项目位置。
选择“创建”来创建项目。 空项目在“解决方案资源管理器”中打开并可见,可供编辑。
在 VS Code 或 Azure Data Studio 的“数据库项目”视图中,选择“新建项目”按钮。
第一个提示确定要使用哪个项目模板,主要基于目标平台是 SQL Server 还是 Azure SQL。 如果系统提示选择特定版本的 SQL,请选择与目标数据库匹配的版本,但如果目标数据库版本未知,请选择最新版本,因为稍后可以修改该值。
在出现的文本输入中输入项目名称,该名称无需与数据库名称匹配。
在出现的“选择文件夹”对话框中,选择项目文件夹的目录、.sqlproj
文件和要包含的其他内容。
当系统提示是否创建 SDK 样式项目(预览)时,请选择“是”。
一旦完成后,空项目在“数据库项目”视图中打开并可见,可供编辑。
安装适用于 Microsoft.Build.Sql 项目的 .NET 模板后,可以从命令行创建新的 SQL 数据库项目。 -n
选项指定项目的名称,-tp
选项指定项目目标平台。
使用选项 -h
查看所有可用选项。
# install Microsoft.Build.Sql.Templates
dotnet new sqlproject -n MyDatabaseProject
步骤 2:将对象添加到项目中
在“解决方案资源管理器”中,右键单击项目节点,然后依次选择“添加”、“表”。 此时会显示“添加新项”对话框,可在其中指定表名称。 选择“添加”以在 SQL 项目中创建表。
该表在 Visual Studio 表设计器中打开,其中包含模板表定义,可在该设计器中添加列、索引和其他表属性。 完成初始编辑后保存文件。
可以通过“添加新项”对话框添加更多数据库对象,例如视图、存储过程和函数。 右键单击“解决方案资源管理器”中的项目节点并选择“添加”,然后选择所需的对象类型来访问对话框。 该项目中的文件可以通过“添加”下的“新建文件夹”选项组织到文件夹中。
在“解决方案资源管理器”中,右键单击项目节点,选择“添加”,然后选择“新项”。 此时会显示“添加新项”对话框,选择“显示所有模板”,然后选择“表”。 将表名指定为文件名,然后选择“添加”以在 SQL 项目中创建表。
该表将在 Visual Studio 查询编辑器中打开,其中包含模板表定义。你可以在该编辑器中添加列、索引和其他表属性。 完成初始编辑后保存文件。
可以通过“添加新项”对话框添加更多数据库对象,例如视图、存储过程和函数。 右键单击“解决方案资源管理器”中的项目节点并选择“添加”,然后在“显示全部模板”后选择所需的对象类型。 该项目中的文件可以通过“添加”下的“新建文件夹”选项组织到文件夹中。
在 VS Code 或 Azure Data Studio 的“数据库项目”视图中,右键单击项目节点并选择“添加表”。 在出现的对话框中,指定表名称。
该表在文本编辑器中打开,其中包含模板表定义,可在该编辑器中添加列、索引和其他表属性。 完成初始编辑后保存文件。
可以通过项目节点上的上下文菜单添加更多数据库对象,例如视图、存储过程和函数。 通过右键单击 VS Code 或 Azure Data Studio 的“数据库项目”视图中的项目节点,然后选择所需的对象类型来访问对话框。 该项目中的文件可以通过“添加”下的“新建文件夹”选项组织到文件夹中。
可以通过在项目目录或嵌套文件夹中创建文件,来将文件添加到项目中。 文件扩展名应为 .sql
,建议按对象类型或架构和对象类型进行组织。
表的基础模板可用作在项目中创建新表对象的起点:
CREATE TABLE [dbo].[Table1]
(
[Id] INT NOT NULL PRIMARY KEY
)
步骤 3:生成项目
生成过程针对项目文件中指定的目标平台验证对象与语法之间的关系。 生成过程的项目输出是一个 .dacpac
文件,该文件可用于将项目部署到目标数据库,并包含数据库架构的已编译模型。
在“解决方案资源管理器”中,右键单击项目,然节点后选择“生成”。
输出窗口会自动打开以显示生成过程。 如果存在错误和警告,它们会显示在“输出窗口”中。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin\Debug\projectname.dacpac
)中。
在“解决方案资源管理器”中,右键单击项目,然节点后选择“生成”。
输出窗口会自动打开以显示生成过程。 如果存在错误和警告,它们会显示在“输出窗口”中。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin\Debug\projectname.dacpac
)中。
在 VS Code 或 Azure Data Studio 的“数据库项目”视图中,右键单击项目节点并选择“生成”。
输出窗口会自动打开以显示生成过程。 如果存在错误和警告,它们会显示在“输出窗口”中。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin/Debug/projectname.dacpac
)中。
可以使用 dotnet build
命令从命令行中生成 SQL 数据库项目。
dotnet build
# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj
生成输出包括任何错误或警告,以及发生错误或警告的特定文件和行号。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin/Debug/projectname.dacpac
)中。
第 4 步:部署项目
.dacpac
文件中数据库架构的编译模型可以使用 SqlPackage
命令行工具或其他部署工具部署到目标数据库。 部署过程将确定更新目标数据库以匹配在 .dacpac
中定义的架构所需的步骤,以根据数据库中已存在的对象视需要创建或更改对象。 因此,部署过程是幂等的,这意味着它可以多次运行,而不会造成问题,并且你可以将相同的 .dacpac
部署到多个数据库,而无需预先确定其状态。
在“解决方案资源管理器”中,右键单击项目节点,并选择“发布...”。
此时会打开“发布”对话框,可在其中建立目标数据库连接。 如果没有用于部署的现有 SQL 实例,则 LocalDB ((localdb)\MSSQLLocalDB
) 随 Visual Studio 一起安装,并且可用于测试和开发。
指定数据库名称,然后选择“发布”以将项目部署到目标数据库或生成脚本,以在执行之前生成要查看的脚本。
在“解决方案资源管理器”中,右键单击项目节点,并选择“发布...”。
此时会打开“发布”对话框,可在其中建立目标数据库连接。 如果没有用于部署的现有 SQL 实例,则 LocalDB ((localdb)\MSSQLLocalDB
) 随 Visual Studio 一起安装,并且可用于测试和开发。
指定数据库名称,然后选择“发布”以将项目部署到目标数据库或生成脚本,以在执行之前生成要查看的脚本。
在 VS Code 或 Azure Data Studio 的“数据库项目”视图中,右键单击项目节点并选择“发布”。
提示
如果没有可用于部署的 SQL 实例,SQL 数据库项目扩展可以在新容器中为你创建本地 SQL Server 实例。 容器运行时,例如 Docker Desktop 运行时,从下拉列表中选择“发布到新的 SQL Server 本地开发容器”。
如果有用于部署的现有 SQL 实例,请选择“发布到现有 SQL Server”,如果系统提示发布配置文件,则选择“不要使用配置文件”。
如果尚未配置到目标数据库的连接,系统会提示你创建新的连接。 新的连接输入需要服务器名称、身份验证方法和数据库名称。
配置连接后,部署过程将开始。 可以选择在执行(生成脚本)之前自动执行部署(发布)或生成要查看的脚本。
SqlPackage CLI 用于使用发布操作将 .dacpac
文件部署到目标数据库。
例如,若要基于连接字符串将 .dacpac
文件部署到目标数据库:
sqlpackage /Action:Publish /SourceFile:bin/Debug/projectname.dacpac /TargetConnectionString:{yourconnectionstring}