[英]Map data with CTAS in SQL Server from source with different column names to existing SQL table
設想:
是源表SourceData (Name, Number, Date)
是否存在表ProdData (ProdName、ProdNumber、CreatedDate)
要求:
如果生產數據中已經存在,請不要從源導入!!!
將行從源導入到生產數據,保留現有行,附加新行,映射列,如:
輸出數據示例:
源數據
Name | Number | Date
-----+--------+------
A | 1 | 2012
B | 2 | NULL
生產數據
ProdName | ProdNumber | CreatedDate
---------+------------+------------
Existing | 123 | 2018
A | 1 | 2012
B | 2 | 2020
這樣的東西會滿足您的需求嗎?
INSERT ProdData (ProdName, ProdNumber, CreatedDate)
SELECT
SourceData.name as "ProdName",
SourceData.Number as "ProdNumber",
NVL(SourceData.Date,to_date(sysdate,'YYYY') as "CreatedDate"
FROM
SourceData
WHERE
NOT EXISTS (SELECT
1
FROM
ProdData PD2
WHERE
PD2.ProdName = SourceData.name
and PD2.ProdNumber = SourceData.Number
and NVL(PD2.CreatedDate,to_date(sysdate,'YYYY') = nvl(SourceData.Date,to_date(sysdate,'YYYY');
另一個替代選項可能類似於:
CREATE TABLE ProdData_new
WITH
(
DISTRIBUTION = HASH(ProdName)
, CLUSTERED INDEX (ProdNumber)
)
AS
SELECT
pdold.ProdName AS ProdName
, pdold.ProdNumber AS ProdNumber
, NVL(pdold.CreatedDate,to_date(sysdate,'YYYY')) AS CreatedDate
FROM
ProdData AS pdold
UNION
SELECT
sdold.name AS ProdName
, sdold.Number AS ProdNumber
, NVL(sdold.Date,to_date(sysdate,'YYYY') AS CreatedDate
FROM
SourceData AS sdold
;
--Optional Renaming of old tables
--RENAME OBJECT ProdData TO ProdData_old;
--RENAME OBJECT SourceData TO SourceData_old;
--RENAME OBJECT ProdData_new TO ProdData;
--DROP TABLE ProdData_old;
--DROP TABLE SourceData_old;
或者可能更像:
CREATE TABLE ProdData_new
( ProdName NVARCHAR NOT NULL
, ProdNumber INT NOT NULL
, CreatedDate INT NOT NULL)
WITH
( DISTRIBUTION = HASH(ProdName)
, CLUSTERED INDEX (ProdNumber) )
AS
SELECT
pdold.ProdName AS ProdName
, pdold.ProdNumber AS ProdNumber
, NVL(pdold.CreatedDate,to_date(sysdate,'YYYY')) AS CreatedDate
FROM
ProdData AS pdold
UNION
SELECT
sdold.name AS ProdName
, sdold.Number AS ProdNumber
, NVL(sdold.Date,to_date(sysdate,'YYYY') AS CreatedDate
FROM
SourceData AS sdold
;
--Optional Renaming of old tables
--RENAME OBJECT ProdData TO ProdData_old;
--RENAME OBJECT SourceData TO SourceData_old;
--RENAME OBJECT ProdData_new TO ProdData;
--DROP TABLE ProdData_old;
--DROP TABLE SourceData_old;
在不知道您嘗試過什么、您的特定語法和您的 DB_Schema_Table 設置的情況下,這都是一些猜測工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.