SQL如何创建一个在每次其他表更新时都不断更新的表?

时间:2019-06-18 19:13:47

标签: sql sql-server database-replication

我正在尝试创建客户订单表。不幸的是,订单的不同部分位于不同的服务器中。加入前两个服务器会使查询花费1-5分钟,而加入最后一个服务器则需要花费多个小时。

我想做的是创建查询需要很长时间,但是运行一次,并将来自三台服务器的所有数据组合到一台服务器和一个表中。然后,每当其中一个特定表更新时,我的表也将更新(仅在顶部)。

这是我的查询

 SELECT 
--*,
I.Date_Created
,I.Company_Code
,I.Division_Code
,I.Invoice_Number
,I.Customer_Purchase_Order_Number
,I.Total_Quantity
,Month( I.Date_Created) Month
,Year( I.Date_Created) Year

,CASE WHEN sh.packslip IS NULL THEN ph.SHIP_CITY ELSE sh.SHIP_CITY END City

,CASE WHEN sh.packslip is null 
THEN CASE WHEN ph.SHIP_CNTRY <> 'US' THEN 'INT' ELSE ph.SHIP_PROV END
ELSE CASE WHEN sh.SHIP_CNTRY <> 'US' THEN 'INT' ELSE sh.SHIP_PROV END
END State

,CASE WHEN sh.packslip is null THEN ph.SHIP_ZIP ELSE sh.SHIP_ZIP END Zip

,CASE WHEN sh.packslip is null THEN ph.SHIP_CNTRY ELSE sh.SHIP_CNTRY END CountryCode

,O.TotalPrice Total
,O.Email CustomerEmail

FROM [JMNYC-AMTDB].[AMTPLUS].[dbo].Invoices I --Table one in server one

LEFT JOIN -- Table two and three in server two
    [JMDNJ-ACCELSQL].[A1WAREHOUSE].[dbo].pickhead ph (nolock) ON I.PickTicket_Number = ph.packslip

LEFT JOIN 
    [JMDNJ-ACCELSQL].[A1WAREHOUSE].[dbo].SHIPHIST sh (nolock) ON I.Customer_Purchase_Order_Number = sh.cust_po

LEFT JOIN -- Table four in server three, joining this one make the query go from one minute to an hour+
    [SHOPIFY].[shopify_moret].[dbo].orderwrappers O ON sh.cust_po = o.OrderName

Where I.CUSTOMER_NUMBER = 'ECOM2X' AND CONVERT(Date, I.Date_Created) >= Convert(datetime, '05/29/2019')

因此,我希望此查询运行一次并构建一个表。然后,每次发票表被更新时,我希望我的内置表也被更新,然后检查orderwrappers表以添加电子邮件和totalprice。

然后,我可以将我的最终连续更新表用于以后的所有查询。

有人知道我该怎么做吗?

0 个答案:

没有答案