2017-09-13 20 views
0

我想在teradata中遷移下面的查詢。我正在更新我的表中的一些行,並已寫入此查詢在SQL中。現在,我想在teradata的腳本下遷移。我聽說我們需要使用volatile表來選擇數據然後更新。我需要先創建一個易失性表,然後進行更新,這是強制性的嗎?如何遷移teradata中的sql更新查詢?

UPDATE gam 
    SET gam.DeviceActiveInSIGMA = 1, 
    gam.DeviceInSIGMA =1, 
    gam.AccountServiceInSIGMA =1, 
    gam.AccountInSIGMA =1, 
    gam.PKG_TYPE = 'VOICE', 
    gam.MACType = 'Voice' 
    FROM Staging.AllAccountDevices gam 
    WITH (INDEX (ix_MAC_UniqueID)) 
    INNER JOIN dbo.TBL_SIGMA_VOIP_EQUIPMENT dvc 
    ON gam.MACAddr = dvc.MTA_MAC 
    INNER JOIN dbo.TBL_SIGMA_SUB sac 
    ON dvc.SUB_ID = sac.SUB_ID 
    AND gam.AccountNumber = sac.Account_Number 
    LEFT OUTER JOIN HSIRECON.DBO.NEXTGEN_ACTIVE_SPAS nas 
    ON SUBSTRING(gam.AccountNumber,1,6) = nas.ACCOUNT_START 

    WHERE nas.ACCOUNT_START is NULL 
    AND gam.DeviceActiveInSIGMA = 0 
    AND dvc.STATUS IN ('active','change_in_progress') 
+0

您是否嘗試將以上查詢_from_其他數據庫_into_ Teradata?如果是這樣,那麼這個查詢寫入哪個數據庫? –

+0

該查詢是爲oracle數據庫編寫的。現在正在遷移到teradata。 – Nandan23

回答

1

你並不需要使用揮發性表,但派生表,因爲Teradata的不支持外更新中加入。

與此類似:

UPDATE gam 
FROM Staging.AllAccountDevices AS gam, 
(
    SELECT * FROM Staging.AllAccountDevices gam 
    INNER JOIN dbo.TBL_SIGMA_VOIP_EQUIPMENT dvc 
     ON gam.MACAddr = dvc.MTA_MAC 
    INNER JOIN dbo.TBL_SIGMA_SUB sac 
    ON dvc.SUB_ID = sac.SUB_ID 
    AND gam.AccountNumber = sac.Account_Number 
    LEFT OUTER JOIN HSIRECON.DBO.NEXTGEN_ACTIVE_SPAS nas 
    ON Substr(gam.AccountNumber,1,6) = nas.ACCOUNT_START 
    WHERE nas.ACCOUNT_START IS NULL 
    AND gam.DeviceActiveInSIGMA = 0 
    AND dvc.STATUS IN ('active','change_in_progress') 
) AS dt 

SET DeviceActiveInSIGMA = 1, 
    DeviceInSIGMA =1, 
    AccountServiceInSIGMA =1, 
    AccountInSIGMA =1, 
    PKG_TYPE = 'VOICE', 
    MACType = 'Voice' 
WHERE gam.pk = dt.pk -- must be the Primary Key columns(s) of Staging.AllAccountDevices 
    AND gam.DeviceActiveInSIGMA = 0 

順便說一下,原來的查詢是用於SQL Server,Oracle不寫。