"синхронизировать" или копировать между таблицами - PullRequest
0 голосов
/ 23 января 2019

У меня есть существующая таблица "dbo.Source Table", и я хочу создать еще одну [me].[DestinationTable], в которую можно скопировать некоторые столбцы из существующей таблицы "dbo.Source Table".Я использую Microsoft SQL Server Management Studio.

Это то, что я хочу, в таблице "Табло dbo.Source" у меня есть одна строка, в которой у меня есть информация в столбцах "TextColumn", "ValueColumn" и т. Д. Для началаэту информацию я хочу скопировать в новую таблицу [me].[Destination Table], но когда информация в таблицу "dbo.Source Tabel", например, в столбце "TextColumn" меняется с "MDO" на "Marius", автоматически обновляется в таблице [me].[Destination Table]и т. д. для каждого столбца и при удалении строки из dbo.SourceTable, подлежащей удалению и из me.DestinationTable.

enter image description here

CREATE TABLE dbo.SourceTable
    (
    SourcePrimaryKeyID INT IDENTITY PRIMARY KEY,
    TextColumn VARCHAR(2048),
    ValueColumn DECIMAL(18,3),
    NumberColumn INT
    )

CREATE TABLE [me].[DestinationTable]
    (
    DestinationPrimaryKeyID INT IDENTITY PRIMARY KEY,
    SourcePrimaryKeyID INT,
    TextColumn VARCHAR(2048),
    ValueColumn DECIMAL(18,3),
    NumberColumn INT,
    ActionType VARCHAR(100),
    CreatedDate AS GETDATE(), -- Default to current date
    CreatedDatabaseUser AS SUSER_SNAME()
    )

GO

1 Ответ

0 голосов
/ 23 января 2019

У меня нет возможности проверить это, но:

MERGE me.DestinationTable tgt
USING dbo.SourceTable src
 ON  src.SourcePrimaryKeyID = tgt.DestinationPrimaryKeyID
WHEN MATCHED THEN
  UPDATE SET
    tgt.TextColumn =   src.TextColumn, 
    tgt.ValueColumn =  src.ValueColumn,
    tgt.NumberColumn = src.NumberColumn
WHEN NOT MATCHED BY TARGET THEN INSERT VALUES (
  src.TextColumn, 
  src.ValueColumn,
  src.NumberColumn
);
GO
...