【问题标题】:Slowly Changing dimension type 1 in SQL server - deleting data on target tableSQL Server 中的渐变维度类型 1 - 删除目标表上的数据
【发布时间】:2021-08-30 15:58:01
【问题描述】:

嘿,

我是 SQL 新手,如果这个问题太基础,我深表歉意。

我有以下表格和 SCD 类型 1 逻辑的解决方案。

-- 源表

CREATE TABLE table_source (
recipe_id INT NOT NULL,
recipe_name VARCHAR(30) NOT NULL,
HashValue VARCHAR(30) NOT NULL)


INSERT INTO table_source
(recipe_id, recipe_name, HashValue) 
VALUES 
(1,'Tacos','1039479aa20'),
(2,'TomatoSoup','1039479aa21'),
(3,'GrilledCheese', '1039479aa22')

--目标表

CREATE TABLE table_target (
recipe_id INT NOT NULL,
recipe_name VARCHAR(30) NOT NULL,
HashValue VARCHAR(30) NOT NULL)

INSERT INTO table_target
(recipe_id, recipe_name, HashValue) 
VALUES 
(1,'Tacos','1039479aa20'),
(2,'TomatoSoup','1039479aa21'),
(3,'GrilledCheese', '1039479aa22'),
(4,'BakedCheese', '1039479aa23')

--TYPE 1 渐变维度

MERGE INTO table_target AS TARGET
USING (

SELECT  recipe_id,
        recipe_name,
        HashValue
 FROM fram_source
 ) AS SOURCE
 ON SOURCE.recipe_id  = TARGET.recipe_id
 WHEN MATCHED
 AND (ISNULL(TARGET.HashValue, '') <> ISNULL(SOURCE.HashValue, ''))
 THEN
 UPDATE
 SET
   TARGET.recipe_id  = SOURCE.recipe_id 
  ,TARGET.recipe_name = SOURCE.recipe_name,
   TARGET.[HashValue] = SOURCE.[HashValue]
WHEN NOT MATCHED
THEN
INSERT (recipe_id,
       recipe_name,
       HashValue
  )
VALUES (

   SOURCE.recipe_id
  ,SOURCE.  recipe_name
   , SOURCE.[HashValue]
 )  
  OUTPUT
  $action,
  inserted.*,
  deleted.*

;

我希望我的目标表与我的源表相同,但此脚本不会删除目标表中的额外值。 我的问题是,如何使这个脚本删除目标表中不在源表中的值?

【问题讨论】:

  • 嗯?你不想删除任何不存在的东西吗? DELETE FROM target_table WHERE NOT EXISTS (SELECT ... FROM target_table WHERE x = source_table.x...);
  • 谢谢,是的。我测试了它并且它有效,但我需要将此功能添加到我的脚本中,所以我找到了解决方案。感谢您的帮助!

标签: sql scd


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    相关资源
    最近更新 更多