【发布时间】:2021-08-25 20:19:12
【问题描述】:
我正在尝试从远程 DB2 表更新 SQL 表。同一条记录可能有多个更新,但我需要按照它们在 DB2 表中的顺序进行更新。您不能在派生表上使用 Order By。我尝试了几种不同的选项来尝试使其正常工作,但更新仍然没有按顺序进行。
例如:
- 更改 1 - 客户名称 = ABCX
- 更改 2 - 客户名称 = ABC
在我运行查询之后,客户名称应该是 ABC,而应该是 ABC。
我真的不知道还能尝试什么。我已经尝试过临时表(仍然是派生表),创建了一个包含日期和时间字段、子选择、row_number() over(按日期、时间排序)和许多其他内容的连接字段。我想按远程表中的日期和时间字段对其进行排序。
任何见解都将不胜感激。
谢谢。
这是我的基本代码:
SET
A.CUSRID = B.RECORD_ID,
A.CUSSTS = B.ACTIVE_CODE,
A.CUSCOM = B.COMPANY_NUMBER,
A.CUSMNM = B.CUSTOMER_NAME,
A.CUSAD1 = B.CUSTOMER_ADDRESS_1,
A.CUSAD2 = B.CUSTOMER_ADDRESS_2,
A.CUSAD3 = B.CUSTOMER_ADDRESS_3,
A.CUSZIP = B.CUSTOMER_ZIP_CODE,
A.CUSZPE = B.CUSZPE_NOT_USED,
A.CUSSTC = B.CUSTOMER_STATE,
A.CUSARA = B.CUSTOMER_AREA_CODE,
A.CUSPHN = B.CUSTOMER_PHONE,
A.CUSB17 = B.CUSB17_NOT_USED,
A.CUSTMT = B.STATEMENT_PRINT_CODE,
A.CUSCRL = B.CREDIT_LIMIT,
A.CUSCRC = B.CREDIT_CODE,
A.CUSMCD = B.CUSMCD_NOT_USED,
A.CUSTX1 = B.TAX_RATE_1,
A.CUSTX2 = B.TAX_RATE_2,
A.CUSTXC = B.TAX_RATE,
A.CUSTXE = B.TAX_EXEMPT_ID,
A.CUSB48 = B.CUSB48_NOT_USED,
A.CUSMDT = B.MAINTENANCE_DATE,
A.CUSB20 = B.CUSB20_NOT_USED,
A.CSSRCH = B.SEARCH_FIELD,
A.CUSBRN = B.BRANCH_ID,
A.CUSDST = B.DISTRIBUTOR_NUMBER,
A.CUSB28 = B.CUSB28_NOT_USED
FROM
dbo.mcusmas A
INNER JOIN (
SELECT
RECORD_ID,
ACTIVE_CODE,
COMPANY_NUMBER,
CUSTOMER_NUMBER,
CUSTOMER_NAME,
CUSTOMER_ADDRESS_1,
CUSTOMER_ADDRESS_2,
CUSTOMER_ADDRESS_3,
CUSTOMER_ZIP_CODE,
CUSZPE_NOT_USED,
CUSTOMER_STATE,
CUSTOMER_AREA_CODE,
CUSTOMER_PHONE,
CUSB17_NOT_USED,
STATEMENT_PRINT_CODE,
CREDIT_LIMIT,
CREDIT_CODE,
CUSMCD_NOT_USED,
TAX_RATE_1,
TAX_RATE_2,
TAX_RATE,
TAX_EXEMPT_ID,
CUSB48_NOT_USED,
MAINTENANCE_DATE,
CUSB20_NOT_USED,
SEARCH_FIELD,
BRANCH_ID,
DISTRIBUTOR_NUMBER,
CUSB28_NOT_USED,
FROM remoteserver.MCUSMASPLG
WHERE Event_State_ID = '*New' AND SENT_TO_DATA_WAREHOUSE = 'N'
) B
ON A.CUSMNB = B.CUSTOMER_NUMBER
【问题讨论】:
-
你从错误的方向接近它;您应该只更新每行一次并从源获取最新值,例如具有最大日期、最大 Id 等的行
-
那么当同一行有多个更新时,我需要多次运行查询以获取所有更新?
-
我认为您并不完全理解支持 RDBMS 模型的概念。我认为您正在尝试做的是一个相当常见的场景,如果您将表格和示例数据的详细信息以及预期结果添加到您的问题中,那么有人会更容易正确地提出建议。
标签: sql sql-server tsql