我希望在 2 个数据库之间移动表和相关表中的数据。问题是主键不同步。
有没有人知道可以为给定表生成插入语句及其相关数据(可能是外键)的工具?
我一直在查看 SSMS 工具包、RedGate 的工具、数据库项目数据比较、各种开源数据差异工具等,但没有找到任何东西。
我知道能够遍历外键,所以也许一些非常聪明的 SQL 脚本可能能够做到这一点?
看到我看过这么多工具,我猜想完全自动化可能很难/不可能。但也许一种技术也需要一些人工干预?
或者也许有人对他们如何处理此类任务有任何提示。我真的不喜欢编写大量手动 sql 来处理插入 - 因为它肯定容易出错。
我真正希望的是一种生成 SQL 以在新数据库中进行插入时绑定 PK 和 FK 的方法。
比如说我们有:
+--------------+--------------+
| personid | name |
+--------------+--------------+
| 1 | bob |
| 2 | fred |
+--------------+--------------+
+----------+----------------+----------+
| animalid | animal | PersonID |
+----------+----------------+----------+
| 1 | cat | 1 |
| 2 | dog | 1 |
| 3 | lizard | 2 |
+----------+----------------+----------+
Run Code Online (Sandbox Code Playgroud)
将 bob 复制到新数据库和 bob 的猫和狗会很棒。然后是弗雷德和弗雷德的蜥蜴。
我需要在一段时间内测试 SQL 代理,因此需要经常将系统时钟更改为未来(并返回)......别担心它只是我的本地机器而不是服务器:-)
问题是当我再次将它设置回当前日期时间时,下一次运行日期仍然会听到未来的时间。
例如,如果我将时钟设置为未来,并且作业设置为每分钟运行一次,并且上次运行是在 11/01/2080 01:01:00,那么下次运行是 11/01/2080 01:02: 00,即使我把时钟调回到现在。
可以理解,这是 SQL Server 的正常行为。有没有办法轻松重置下一次运行日期?
我试过手动运行作业,但它对下一次运行时间没有影响。
我希望使用服务主体作为服务器管理员,因此可以在发布管道中使用它来创建更多的 Active Directory 用户。
我成功地将服务主体设置为服务器管理员 * 并使用访问令牌连接到数据库,因此服务主体身份验证工作正常,这非常好,也是一个有趣的挑战。
*编辑:AAD 服务器管理员是通过 ARM 模板创建的,特别是如果您尝试通过门户手动创建,则无法选择服务主体作为管理员用户。但有趣的是,您可以在使用 ARM 创建后在门户中看到服务主体名称正常。并且您可以使用 AAD 身份验证成功登录,因此看起来服务器主体管理员工作正常。
但是,在创建更多用户时,他们似乎永远不会发现错误:
“此时找不到校长'name here'。请稍后再试。”
但是,当以我自己的身份登录时,我可以很好地创建其他用户。
这让我想到 SQL Server 是否使用某种 Active Directory 模拟来验证后续用户/服务主体是否存在?
如果我授予我的服务主体访问 Graph API 的权限,是否会授予它足够的权限?如果是这样,最低限度的权利是什么?
我还看到 Azure SQL Server 在后台创建了一个托管服务标识,所以我想知道这是否也在起作用?
我还在托管实例上看到他们明确要求具有 AAD 权限的服务主体连接到 AAD - 我认为这就像 Azure SQL Server 的 MSI?但是 Azure SQL Server 没有提到这一点,AAD 管理员就足够了。
我很想知道活动目录连接的底层机制是如何工作的,因为它可以帮助我进一步调查我的挑战。