我想做 SQL MERGE...WHEN MATCHED...WHEN NOT MATCHED 所做的事情,但是使用不同 Azure 資料庫上的源表和目標表。(如果有幫助,通常在同一臺服務器上。)
源表和目標表并不完全相同,這就是 SQL MERGE 完美的原因。(我可以決定在哪個列上匹配,以及在 INSERT 或 UPDATE 中使用哪些列。)
如果這不能在 SQL 中完成,我可以將表加載到我的 C# 代碼中并在那里進行合并(雖然會影響性能)。有誰知道.NET 是否有類似于 ADO.NET 中的 SQL MERGE(合并 DataTables)的東西。
謝謝你的幫助!
編輯:此影像顯示 MERGE 之前的表(所有值都是 int):

此圖顯示了 MERGE 陳述句以及生成的源和目標:

uj5u.com熱心網友回復:
Azure SQL 資料庫不直接支持跨資料庫操作,即使這些資料庫位于同一個 Azure SQL Server 中。它會拋出錯誤。

要解決此 Azure SQL 資料庫,僅支持使用彈性查詢的跨資料庫查詢
例子
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
現在我們可以測驗我們的彈性查詢來合并表。
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);
輸出
- 合并前

- 合并后

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524274.html
上一篇:Azure函式消耗計劃和冷啟動
