gpt4 book ai didi

c# - 当两个表位于不同的 Azure 数据库中时 SQL MERGE?

转载 作者:行者123 更新时间:2023-12-03 06:44:24 24 4
gpt4 key购买 nike

我想做 SQL MERGE...WHEN MATCHED...WHEN NOT MATCHED 所做的事情,但源表和目标表位于不同的 Azure 数据库上。 (如果有帮助的话,通常在同一台服务器上。)

源表和目标表不完全相同,这就是为什么 SQL MERGE 是完美的。 (我可以决定要匹配哪些列,以及在 INSERT 或 UPDATE 中使用哪些列。)

如果这不能在 SQL 中完成,我可以将表加载到我的 C# 代码中并在那里进行合并(尽管会影响性能)。有谁知道.NET 是否有类似于 ADO.NET 中的 SQL MERGE(合并数据表)的功能。

感谢您的帮助!

编辑:此图片显示了 MERGE 之前的表格(所有值都是 int):

Source and dest

此图显示了 MERGE 语句以及生成的源和目标:

After MERGE

最佳答案

Azure SQL 数据库不支持直接跨数据库操作,即使这些数据库位于同一个 Azure SQL Server 中。它将抛出以下错误。

enter image description here

要解决此问题,Azure SQL 数据库仅支持 elastic query 的跨数据库查询。

示例

CREATE MASTER KEY; -- create master key
GO

-- credential maps to a login or contained user used to connect to remote database
CREATE DATABASE SCOPED CREDENTIAL CrossDbCred1 -- credential name
WITH IDENTITY = 'username', -- login or contained user name
SECRET = '**********'; -- login or contained user password
GO

-- data source to remote Azure SQL Database server and database
CREATE EXTERNAL DATA SOURCE source
WITH
(
TYPE=RDBMS, -- data source type
LOCATION='server.database.windows.net', -- Azure SQL Database server name
DATABASE_NAME='database1', -- database name
CREDENTIAL=CrossDbCred1 -- credential used to connect to server / database
);
GO

-- external table points to table in an external database with the identical structure
CREATE EXTERNAL TABLE [dbo].[source]
(
[Id] [varchar](50),
[value1] [int],
[value2] [int],
[value3] [int]
)
WITH (DATA_SOURCE = [source], -- data source
SCHEMA_NAME = 'dbo', -- external table schema
OBJECT_NAME = 'source' -- name of table in external database
);
GO

现在我们可以测试 Elastic Query 来合并表。

MERGE into destination1 B
USING source E
ON (B.Id = E.Id)
WHEN MATCHED THEN
UPDATE SET value2 = E.value2, value3 = E.value3
WHEN NOT MATCHED THEN
INSERT (Id,value2,value3) VALUES (Id,value2,value3);

输出

  • 合并之前 enter image description here
  • 合并后 enter image description here

关于c# - 当两个表位于不同的 Azure 数据库中时 SQL MERGE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74244301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com