教程:从现有数据库开始
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
SQL 项目包含数据库中所有对象的声明性(CREATE 语句)文件,例如表、视图和存储过程。 这些文件可用于创建新数据库、更新现有数据库,甚至仅用于跟踪源控件中的数据库。 通常,当我们有一个现有数据库并且希望以最小的工作量在 SQL 项目中创建与数据库匹配的对象时,我们通常会从 SQL 项目开始。
某些 SQL 项目工具包括从现有数据库创建新 SQL 项目的单个步骤。 其他工具需要几个步骤来创建新的 SQL 项目,然后从现有数据库中导入对象。 除了 Visual Studio (SQL Server Data Tools) 说明外,本指南重点介绍 SDK 样式的 SQL 项目。
使用本教程中的选项 1,你可以:
步骤 1:从现有数据库创建新的 SQL 项目步骤 2:生成 SQL 项目
使用本教程中的选项 2,你可以:
- 步骤 1:创建空的新 SQL 项目
- 步骤 2:从现有数据库中导入对象
- 步骤 3:生成 SQL 项目
先决条件
- .NET 8 SDK
- Visual Studio 2022 Community、Professional 或 Enterprise
- Visual Studio 2022 中安装的 SDK 式 SQL Server Data Tools(预览版)
- SqlPackage CLI
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
注意
若要完成本教程,需要访问 Azure SQL 或 SQL Server 实例的权限。 可以在 Windows 或容器上使用 SQL Server 开发者版本在本地进行免费开发。
选项 1:从现有数据库中创建新的 SQL 项目
步骤 1:从现有数据库中创建新的 SQL 项目
从 Visual Studio 中的 SQL Server 对象资源管理器中,右键单击要从中创建项目的数据库,然后选择“新建项目...”。
在“新建项目”对话框中,提供项目名称,该名称无需与数据库名称匹配。 根据需要验证和修改项目位置。 默认导入设置按架构、然后再按对象类型将对象导入文件夹。 可以修改导入设置以更改文件夹结构,或将权限包含在要导入的对象中。 开始导入。
导入继续时,进度会显示为“导入数据库”对话框中的消息。 导入完成后,导入的对象将显示在“解决方案资源管理器”中,且日志存储在 Import Schema Logs
下的项目目录中的文件中。 选择“完成”。
选项 1 不适用于命令行。 请改用选项 2。
在 VS Code 或 Azure Data Studio 中的“数据库对象资源管理器”视图中,选择要从中创建项目的数据库。 右键单击“数据库”,然后选择“从数据库创建项目”。
在 Azure Data Studio 中,“从数据库创建项目”对话框需要选择项目名称和位置。 默认导入设置按架构、然后再按对象类型将对象导入文件夹。 可以选择不同的文件夹结构,或者在选择“创建”之前在导入的对象中包含权限。
在 VS Code 中,命令提示符会请求项目名称和位置。 默认导入设置按架构、然后再按对象类型将对象导入文件夹。 可以选择不同的文件夹结构,或在导入开始之前在导入的对象中包含权限。
打开“数据库项目”视图以查看新项目和导入的对象定义。
选项 1 不适用于命令行。 请改用选项 2。
步骤 2:生成 SQL 项目
生成过程针对项目文件中指定的目标平台验证对象与语法之间的关系。 生成过程的项目输出是一个 .dacpac
文件,该文件可用于将项目部署到目标数据库,并包含数据库架构的已编译模型。
在“解决方案资源管理器”中,右键单击项目,然节点后选择“生成”。
输出窗口会自动打开以显示生成过程。 如果存在错误和警告,它们会显示在“输出窗口”中。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin\Debug\projectname.dacpac
)中。
选项 1 不适用于命令行。 请改用选项 2。
在 VS Code 或 Azure Data Studio 的“数据库项目”视图中,右键单击项目节点并选择“生成”。
输出窗口会自动打开以显示生成过程。 如果存在错误和警告,它们会显示在“输出窗口”中。 成功生成后,将会创建生成项目(.dacpac
文件),其位置包含在生成输出(默认值为 bin/Debug/projectname.dacpac
)中。
选项 1 不适用于命令行。 请改用选项 2。
选项 2:创建新的空 SQL 项目并从现有数据库中导入对象
或者,可以单独执行项目创建和对象导入步骤。
步骤 1:创建新的空 SQL 项目
在向项目导入对象之前,我们将通过创建新的 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 Server 对象资源管理器中的数据库,则该数据库显示在“历史记录”列表中。
默认导入设置按架构、然后再按对象类型将对象导入文件夹。 可以修改导入设置以更改文件夹结构,或将权限包含在要导入的对象中。 开始导入。
导入继续时,进度会显示为“导入数据库”对话框中的消息。 导入完成后,导入的对象将显示在“解决方案资源管理器”中,且日志存储在 Import Schema Logs
下的项目目录中的文件中。 选择“完成”以返回到该项目。
我们将使用 SqlPackage CLI 将对象从现有数据库导入第 1 步在 Visual Studio 中创建的新 SQL 数据库项目。 以下 SqlPackage 命令将数据库的架构导入按嵌套架构和对象类型文件夹组织的 MyDatabaseProject
文件夹中。
sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
当这些文件夹放置在 SDK 样式的 SQL 数据库项目文件夹中时,它们会自动包含在项目中,而无需导入它们或修改 SQL 项目文件。
注意
VS Code 中的 SQL 数据库项目扩展不支持将对象从数据库导入项目。 使用 Azure Data Studio 中的 SQL 数据库项目扩展从数据库导入对象,或按照选项 1 从 VS Code 中的现有数据库创建新项目。
在 Azure Data Studio 中的 SQL 数据库项目扩展中,打开“数据库项目”视图。 右键单击项目节点,然后选择“从数据库中更新项目”。
在“更新数据库”对话框中,选择要从中导入对象的数据库的连接。 如果已连接到“连接”视图中的数据库,则该数据库会显示在“历史记录”列表中。
选择“查看架构比较中的更改”以查看并选择要导入的对象子集,或选择“应用所有更改”以导入所有对象。
SqlPackage CLI 可用于将现有数据库的架构提取到 .dacpac
文件或单个 .sql
文件。 以下 SqlPackage 命令将数据库的架构提取到按嵌套架构和对象类型文件夹组织的 .sql
文件中。
sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
当这些文件夹放置在 SDK 样式的 SQL 数据库项目文件夹中时,它们会自动包含在项目中,而无需导入它们或修改 SQL 项目文件。
步骤 3:生成 SQL 项目
生成过程针对项目文件中指定的目标平台验证对象与语法之间的关系。 生成过程的项目输出是一个 .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
)中。