Applies to:✅SQL 数据库 Microsoft Fabric
本教程介绍如何使用 Fabric git 集成源代码管理在 Fabric 中使用 SQL 数据库。
Microsoft Fabric 中的 SQL 数据库具有源代码管理集成或“git 集成”,以便用户可以跟踪其数据库对象随时间推移的定义。 此集成使团队能够:
- 将数据库提交到源代码管理,该控件会自动将实时数据库转换为配置的源代码管理存储库中的代码(例如Azure DevOps)。
- 从源代码管理库的内容更新数据库对象,验证库中的代码后,再对数据库应用差异变更。
如果不熟悉 git,建议查看以下资源:
本文提供了一系列有用的方案,你可以使用这些方案单独或组合使用 Fabric 中的 SQL 数据库来管理开发过程:
本文中的方案在“公开的数据”一集中进行了介绍。 请观看视频,以大致了解 Fabric 中的源代码管理集成:
注意事项
此时,源代码管理和部署管道集成中不包括排序规则和兼容性级别等数据库级设置。 对于可以在创建数据库后使用 T-SQL 设置的数据库设置,可以在部署后使用脚本修改数据库。
先决条件
- 需要现有的 Fabric 容量。 如果没有, 请启动 Fabric 试用版。
- 确保启用 Git 集成租户设置。
- 创建新的工作区或使用现有的 Fabric 工作区。
- 创建或使用现有的 Fabric SQL 数据库。 如果还没有 SQL 数据库,请在 Fabric 中创建新的 SQL 数据库。
- 可选:安装适用于 VS Code 的 Visual Studio Code、MSSQL 扩展和 SQL 项目扩展。
安装
这种存储库连接适用于工作区级别,因此存储库中的单个分支与该工作区相关联。 存储库可以有多个分支,但只有工作区设置中选择的分支中的代码直接影响工作区。
有关将工作区连接到源代码管理存储库的步骤,请参阅 Git 集成入门。 工作区可以连接到Azure DevOps或GitHub远程存储库。
将 Fabric SQL 数据库添加到源代码管理
在此方案中,将数据库对象提交到版本控制系统。 你可能正在开发这样一个应用程序:直接在测试数据库中创建对象,并在源代码管理中跟踪该数据库,就像应用程序代码一样。 因此,你有权访问数据库对象定义的历史记录,并且可以使用 Git 概念(如分支和合并)来自定义开发过程。
- 在 Fabric SQL 编辑器、SQL Server Management Studio、Visual Studio Code 的 MSSQL 扩展或其他外部工具中连接到你的 SQL 数据库。
- 在数据库中创建新表、存储过程或其他对象。
- 选择“源代码管理”按钮以打开源代码管理面板。
- 选择所需数据库旁边的复选框。 选择 “提交”。 Fabric 服务从数据库读取对象定义,并将其写入远程存储库。
- 现在可以在代码存储库源视图中查看数据库对象的历史记录。
继续编辑数据库(包括编辑现有对象)时,请按照以下步骤将这些更改提交到源代码管理。
SQL 项目文件
源代码管理存储库中的 SQL 项目文件包含有关数据库的元数据。 Fabric 源代码管理集成使用此文件将更多功能引入源代码管理和部署管道。 Fabric 源代码管理集成自动生成和更新项目文件。 请避免对项目文件进行手动编辑,因为在下次从 Fabric 的提交中,您的编辑将会被 Fabric 源控制集成所覆盖。 但是,如果要使用 SQL 工具(如 SQL Server Management Studio 或 Visual Studio Code 的 SQL 项目扩展)在本地生成 SQL 项目,则可以在项目文件中添加对 master.dacpac 文件的引用。
Fabric 与 SQL 项目的集成将这些元数据属性添加到项目文件:
- 将
.sharedQueries文件夹从数据库项目生成中排除。 通过此排除,可以跟踪源代码管理中的脚本,而不会影响数据库模型验证。 - .sharedQueries 文件夹中的预部署和部署后脚本
- 将系统对象引用作为对 master.dacpac 文件的包引用
系统对象引用功能会自动设置,无需执行任何操作。 Fabric 查询编辑器在 “共享查询 ”文件夹下提供部署前和部署后脚本。
从源代码管理更新 Fabric SQL 数据库
在此方案中,在 Visual Studio Code 的 SQL 项目扩展中创建数据库对象作为代码,然后将文件提交到源代码管理,然后从源代码管理集成更新 Fabric SQL 数据库。 此方案面向喜欢在 Visual Studio Code 中工作的开发人员,或者拥有使用 SQL 项目的现有应用程序的开发人员,或者具有更高级 CI/CD 管道需求的开发人员。
- 请确保安装 Visual Studio Code 的最新版本以及 Visual Studio Code 的 MSSQL 和 SQL 项目扩展。
- 在工作区创建一个新的 SQL 数据库,然后将其提交到源代码管理,但不添加任何对象。 此步骤将空的 SQL 项目和 SQL 数据库项元数据添加到存储库。
- 将源代码管理存储库克隆到本地计算机。
- 如果使用Azure DevOps,请选择源代码管理项目的
...上下文菜单。 选择 Clone,将Azure DevOps存储库复制到本地计算机。 如果不熟悉Azure DevOps,请参阅 Azure DevOps 的 Code with git 指南。 - 如果使用 GitHub,请选择存储库中的 Code 按钮,并将 URL 复制到本地计算机。 如果不熟悉GitHub,请参阅 cloning a repository 指南。
- 如果使用Azure DevOps,请选择源代码管理项目的
- 在Visual Studio Code中打开克隆的文件夹。 与工作区关联的分支可能不是默认分支。 切换分支后,应会看到 Visual Studio Code 中命名
<yourdatabase>.SQLDatabase的文件夹。 - 为数据库中要创建的至少一个表创建一个
.sql文件,该表位于数据库的文件夹结构中。 该文件应包含该表的CREATE TABLE语句。 例如,在文件夹MyTable.sql中创建一个名为dbo/Tables的文件,使其包含以下内容:CREATE TABLE dbo.MyTable ( Id INT PRIMARY KEY, ExampleColumn NVARCHAR(50) ); - 若要确保语法有效,请使用 SQL 项目验证数据库模型。 添加文件后,使用 Visual Studio Code 中的“数据库项目”视图 生成 项目。
- 成功生成后,使用 Visual Studio Code 中的源代码管理视图或首选的本地 git 接口将文件 提交 到源代码管理。
- 将您的提交推送或同步到远程存储库。 检查新文件是否显示在 Azure DevOps 或 GitHub 中。
- 返回到 Fabric Web 界面,并在工作区中打开“源代码管理”面板。 你可能已经有一个警告,指出“你有来自 git 的待处理更改”。 选择“更新(全部更新)”按钮,将 SQL 项目中的代码应用到数据库。
- 更新之后,您可能会看到数据库状态立即显示为“未提交”。 发生此状态的原因是 Git 集成功能会直接比较为项定义生成的所有文件内容,并且可能存在一些意外差异。 一个示例是列的行内属性。 在这些情况下,需要提交回 Fabric Web 界面中的源代码管理,以便将定义与作为提交操作的一部分生成的内容同步。
- 更新完成后,使用所选工具连接到数据库。 添加到 SQL 项目的对象在数据库中可见。
注意事项
对本地 SQL 项目进行更改时,如果构造中存在语法错误或使用不受支持的功能,数据库更新将失败。 必须先手动还原源代码管理中的更改,然后才能继续。
从源代码管理更新 Fabric 中的 SQL 数据库涉及进行 SQL 项目构建和 SqlPackage 发布操作。 SQL 项目生成会验证 SQL 文件的语法并生成 .dacpac 文件。 SqlPackage 发布操作确定更新数据库以匹配 .dacpac 文件所需的更改。 由于 Fabric 接口的简化性质,以下选项应用于 SqlPackage 发布作:
/p:ScriptDatabaseOptions = false/p:DoNotAlterReplicatedObjects = false/p:IncludeTransactionalScripts = true/p:GenerateSmartDefaults = true
还可以将源代码管理的 SQL 项目克隆到本地计算机,以便在 Visual Studio Code、SQL Server Management Studio 或其他 SQL 项目工具中编辑。 在本地生成 SQL 项目,在将更改提交到源代码管理之前对其进行验证。
创建分支工作区
在这种场景中,您通过让 Fabric 根据源代码管理定义创建一套资源副本,以在 Fabric 中设置新的开发环境。 复制数据库包括签入版本控制系统的数据库对象。 此方案适用于在 Fabric 中继续其应用程序开发生命周期并利用 Fabric 中的源代码管理集成的开发人员。
- 完成情景将 Fabric SQL 数据库转换为版本控制中的代码。
- 应在源代码管理存储库中包含同时具有 SQL 项目和 Fabric 对象元数据的分支。
- 在 Fabric 工作区中,打开“源代码管理”面板。 从“源代码管理”菜单的“分支”选项卡中,选择“将范围扩大到新工作区”。
- 指定要创建的分支和工作区的名称。 分支在源代码控制存储库中创建,并填入与您进行分支的工作区相关联的分支的已提交内容。 工作区是在 Fabric 中创建的。
- 转到 Fabric 中新创建的工作区。 数据库创建完成后,新创建的数据库现在包含代码存储库中指定的对象。 如果打开 Fabric 查询编辑器并在“对象资源管理器”中导航,则数据库具有新的(空)表和其他对象。
将某个分支的更改合并到另一个分支
在此方案中,可以使用源代码库在数据库更改可供部署之前审核这些更改。 此方案适用于在团队环境中工作的开发人员,并且使用源代码管理来管理其数据库更改。
在同一存储库中创建两个具有关联分支的工作区,如前面的方案中所述。
- 使用辅助分支上的数据库,对数据库对象进行更改。
- 例如,修改现有存储过程或创建新表。
- 在 Fabric 的源代码管理面板中使用 “提交 ”按钮签入这些对源代码管理所做的更改。
- 在Azure DevOps或GitHub中,创建从辅助分支到主分支的拉取请求。
- 在拉取请求中,可以查看主工作区和辅助工作区之间数据库代码的变化。
- 完成拉取请求后,将更新源代码管理,但主工作区 Fabric 中的数据库不会更改。 若要更改主数据库,请使用 Fabric 中源代码管理面板上的“更新”按钮从源代码管理更新主工作区。
使用部署后脚本管理静态数据
在此场景中,你将使用源代码控制来管理数据库中的查找表行。 启用此功能的功能、部署前脚本和部署后脚本也适用于部署管道,因此可以使用相同的脚本来管理这两种方案中的静态数据。
从连接到源代码管理的 Fabric 中的 SQL 数据库中,识别或创建一个您想管理静态数据的表。 例如,你可能具有
dbo.Colors应用程序使用的表,并且具有一组不经常更改的已知值。在 Fabric 的 SQL 数据库编辑器中创建新的 查询 。 在查询编辑器中,添加一个
MERGE语句来管理表的内容Colors。 例如:MERGE dbo.Colors AS target USING (VALUES (1, 'Red'), (2, 'Green'), (3, 'Blue') ) AS source (Id, Name) ON target.Id = source.Id WHEN MATCHED THEN UPDATE SET Name = source.Name WHEN NOT MATCHED BY TARGET THEN INSERT (Id, Name) VALUES (source.Id, source.Name) WHEN NOT MATCHED BY SOURCE THEN DELETE;将查询重命名为
Post-Deployment-StaticData.sql并将其移动到 共享查询 目录。在共享查询中,选择查询的 ... 菜单,然后选择“ 设置为部署后脚本”。
此查询自动作为来自源代码管理或部署管道部署的任何更新的一部分运行,因此可以使用源代码管理来管理 Colors 表中的静态数据。 可以在 Fabric 查询编辑器中编辑查询,并将更改提交到源代码管理,以随时间推移管理对静态数据的更改。 此外,由于预部署和部署后脚本包含在 SQL 项目中,因此还可以使用 Visual Studio Code 或其他 SQL 项目工具从本地计算机编辑查询,然后将这些更改提交到源代码管理。 在 SQL 项目文档中详细了解预部署和部署后脚本。
相关内容
- 在Microsoft Fabric中的
SQL 数据库 - 教程:Fabric 中的生命周期管理
- SQL 项目概述
- SQL 项目工具