【发布时间】:2020-01-12 20:42:57
【问题描述】:
我对 SQL 很陌生。当我在 sx_services_db 表 sx_services_table 中找不到记录时,我需要有关如何将数据库 sx_appmts.db 表“Sx_Appmts_table”中的“AH_Field”更新为“No Show”的帮助。
此代码在找到匹配项并将值“Done”放入 AH_Field 时工作正常,但我想在未找到匹配项时放置“No Show”值。
UPDATE S
SET [AH_Field] = 'Done'
FROM [SX_Appmts_Db].[dbo].[Sx_Appmts_Table] S
INNER JOIN [SX_Services_db].[dbo].[Sx_Services_Table] D ON S.[AA_field] = D.[WK_Field]
WHERE S.[AH_Field] LIKE 'Scheduled' AND
S.[AA_Field] = D.[WK_Field] AND
S.[AK_Field] IS NOT NULL AND
S.[AQ_Field] IS NOT NULL AND
CONVERT(VARCHAR(10), S.[AK_Field], 101) = CONVERT(VARCHAR(10), D.[DV_Field], 101) AND
CONVERT(VARCHAR(10), S.[AQ_Field], 101) = CONVERT(VARCHAR(10), D.[AD_Field], 101) AND
S.[AD_Field] LIKE D.[AA_Field]
【问题讨论】:
-
你试过 if /else 吗?
-
看起来您正在将两个日期字段转换为 varchar 以比较它们,例如
convert(varchar(10), S.[AQ_Field], 101) = convert(varchar(10), D.[AD_Field], 101)这毫无意义,会减慢您的查询速度,您可以使用 sargable 谓词CONVERT(DATE, S.[AQ_Field]) = CONVERT(DATE, D.[AD_Field])实现完全相同的效果 -
我会试一试,但由于某种原因,当我第一次进行测试时,除非我使用 VARCHAR 进行 CONVERT,否则它不会进行比较。
-
Iria Blanco,你能给我举个例子,当没有找到记录然后将 AH_Field 更新为“No Show”时使用的 CASE
标签: sql-server tsql join