【问题标题】:"sync" or replicate between tables在表之间“同步”或复制
【发布时间】:2019-01-23 13:25:28
【问题描述】:

我有一个现有的表“dbo.Source Table”,我想创建另一个[me].[DestinationTable],用于从现有的表“dbo.Source Table”中复制一些列。我使用 Microsoft SQL Server Management Studio。

这就是我想要的,在表“dbo.Source Tabel”中我有一行在“TextColumn”、“ValueColumn”等列中有信息。为了开始这个信息,我想复制到新表@ 987654323@,但是当信息进入表“dbo.Source Tabel”时,例如列“TextColumn”中的信息从“MDO”变为“Marius”,在表[me].[Destination Table]中自动更新每一列,当一行是从 dbo.SourceTable 中删除,从 me.DestinationTable 中删除。

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

【问题讨论】:

  • 您需要检查所有列吗?还是只是其中的一部分?
  • 我只需要检查和更新从 Source tabe 复制到 DestinationTabel 的列。

标签: sql synchronization between replicate


【解决方案1】:

我没有环境来测试它,但是:

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

【讨论】:

  • 我新建查询并复制到您上面写的内容中?我这样做并说“消息 207,第 16 级,状态 1,第 3 行无效的列名 'DestinationPrimaryKeyID'。”
  • 非常抱歉:src.SourcePrimaryKeyID = tgt.DestinationPrimaryKeyID。我的错误
  • q4za4...我测试过,它可以工作。唯一的“问题”是每次更新表“me.Destination Table”我必须按F5,不能自动完成吗?代码不能只检查和更新 SourceTable 中的一些列吗?我试图删除您的代码“tgt.NumberColumn = src.NumberColumn”和“src.NumberColumn”,但它不起作用,我给出了这个错误“Msg 156, Level 15, State 1, Line 9 关键字附近的语法不正确'什么时候'。 ”。非常感谢。
  • 我假设你删除了 tgt.NumberColumn = src.NumberColumn 但可能忘记了 tgt.ValueColumn = src.ValueColumn 之后的昏迷,
  • 我在 tgt.Value Column = src.Value Column 之后删除了 coma 仍然不起作用。关于 F5,我的意思是当表 dbo.SourceTable 中的更改值不会自动更新时,我必须按下“执行”按钮。
猜你喜欢
  • 2013-01-31
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
相关资源
最近更新 更多