我希望这在ApptIdList为'12345'时加入,而在ApptIDList为'12345,67890'时不加入
SELECT *
FROM WAITINGROOM a
LEFT JOIN APPOINTMENTS b on b.ApptId = (CASE WHEN (a.ApptIdList LIKE '%,%') THEN -1 ELSE CONVERT(INT, a.ApptIdList) END)
WAITINGROOM.ApptIdList列是一个用逗号分隔的字符串列表,它与int键APPOINTMENTS.ApptId匹配
(是的,我知道这是设计数据库的一种不好的方法。它不是我的数据库,所以我不能更改它。)
这似乎对我的数据库副本有效,但是在某些用户的数据库上它会抛出类似错误
将varchar值'236656,236655'转换为时转换失败 数据类型int
在我看来,这就像在某些计算机上显示的'236656,236655'这样的'%,%'是错误的,这对我来说非常令人惊讶,而且我还没有找到在我的计算机上重现该行为的方法。那有可能吗?还是在发生什至陌生的事情?
我正在使用SQL Server 2008 R2。用户具有各种版本,所有版本均为2008 R2或更高版本。
答案 0 :(得分:2)
从另一个方向进行转换:
SELECT *
FROM WAITINGROOM wr LEFT JOIN
APPOINTMENTS a
ON wr.ApptIdList + ',' LIKE CAST(a.ApptId as VARCHAR(255)) + ',%';
在朝着这个方向进行转换时,不会有转换失败的危险。