在SQL Server中使用非空值更新Null值

时间:2012-09-11 01:20:33

标签: sql sql-server null sql-update

如果之前的条目不为null,我正在尝试查看表并更新当前的null信息。下面的代码是我想出的,但这只是更新每个字段,以便每个联系人都有相同的传真号码。比我聪明的人知道该怎么做吗?

感谢您的帮助。

UPDATE dbo.AAASTA_CONTACT
SET 
CON_CSN = COALESCE(CRNT_RCD.CON_CSN, LST_RCD.CON_CSN),
CON_COMMENTS = COALESCE(CRNT_RCD.CON_COMMENTS, LST_RCD.CON_COMMENTS),
CON_EMAIL_ADDR = COALESCE(CRNT_RCD.CON_EMAIL_ADDR, LST_RCD.CON_EMAIL_ADDR),
CON_FAX_PH_NUM = COALESCE(CRNT_RCD.CON_FAX_PH_NUM, LST_RCD.CON_FAX_PH_NUM),
CON_HOME_PH_NUM = COALESCE(CRNT_RCD.CON_HOME_PH_NUM, LST_RCD.CON_HOME_PH_NUM),
CON_SEX_MF = COALESCE(CRNT_RCD.CON_SEX_MF, LST_RCD.CON_SEX_MF),
CON_PER_TITLE = COALESCE(CRNT_RCD.CON_PER_TITLE, LST_RCD.CON_PER_TITLE),
CON_WORK_PH_NUM = COALESCE(CRNT_RCD.CON_WORK_PH_NUM, LST_RCD.CON_WORK_PH_NUM),
CON_SUPPRESSMAILFL = COALESCE(CRNT_RCD.CON_SUPPRESSMAILFL, LST_RCD.CON_SUPPRESSMAILFL)
FROM
(
SELECT
CON.ALIAS_KEY, 
CON.LAST_UPD, 
CON.CON_CSN, 
CON.CON_COMMENTS, 
CON.CON_EMAIL_ADDR, 
CON.CON_FAX_PH_NUM, 
CON.CON_HOME_PH_NUM, 
CON.CON_SEX_MF, 
CON.CON_PER_TITLE, 
CON.CON_WORK_PH_NUM,
CON.CON_SUPPRESSMAILFL,
RANK() OVER (PARTITION BY CON.ALIAS_KEY ORDER BY CON.LAST_UPD) AS UPD_RNK
FROM dbo.AAASTA_CONTACT CON
) CRNT_RCD
LEFT OUTER JOIN
(
SELECT
CON.ALIAS_KEY, 
CON.LAST_UPD, 
CON.CON_CSN, 
CON.CON_COMMENTS, 
CON.CON_EMAIL_ADDR, 
CON.CON_FAX_PH_NUM, 
CON.CON_HOME_PH_NUM, 
CON.CON_SEX_MF, 
CON.CON_PER_TITLE, 
CON.CON_WORK_PH_NUM,
CON.CON_SUPPRESSMAILFL,
RANK() OVER (PARTITION BY CON.ALIAS_KEY ORDER BY CON.LAST_UPD) AS UPD_RNK
FROM dbo.AAASTA_CONTACT CON
) LST_RCD
ON CRNT_RCD.ALIAS_KEY = LST_RCD.ALIAS_KEY
WHERE CRNT_RCD.UPD_RNK=1
AND LST_RCD.UPD_RNK>1

0 个答案:

没有答案