看来SQL Server CE 不喜欢COALESCE
我的专栏。
如果我的查询有COALESCE(ep.value, '') as id
,查询失败
参数无效
我试过使用 ( case ep.value when null then '' else ep.value end
) 但后来我得到了其他关于NTEXT
等的错误。
有谁知道将空值转换为非空值的另一种方法?
更新:
完整的查询相当复杂,需要很长时间才能解释,但这里是为了好奇。
SELECT COALESCE(ep.value, '') as domainId , [p].[id], [p].[firstName], [p].[middleName], [p].[lastName], [p].[isDeleted], ...
FROM Patient p
INNER JOIN PatientOrganisation po on p.id = po.patientFk
left join extendedproperty ep on ep.entityId = p.id
left join (select sgu.id, sgu.unitFk
from StaffGroupUnit sgu
where sgu.staffGroupFk = '3d364f5b-b5ff-456a-bf33-d8b48bf195b2' and sgu.isDeleted = 0) as bat on bat.unitFk = po.unitFk
where p.isDeleted = 0 and po.isDeleted = 0 AND
COALESCE(ep.metadatafk,'55b009d5-cead-4b62-ad04-526b57a02ed2')='55b009d5-cead-4b62-ad04-526b57a02ed2' and
COALESCE(ep.isdeleted,0)=0 AND
(not exists(select 1 from staffgroupunit sgu where sgu.staffGroupFk = '3d364f5b-b5ff-456a-bf33-d8b48bf195b2' and sgu.isDeleted=0) OR bat.id IS NOT NULL)
order by p.lastName, p.firstName
现在是的,我知道这个查询是可怕的,我实际上已经通过删除它的某些部分来解决这个问题。真正有趣的是,这个查询大部分都可以工作。当它因“参数无效”而失败时,我可以使用 Visual Studio 或 Management Studio 运行完全相同的查询,它会正常工作。
我们正在使用 CE 3.5,因为我们的产品之一是 Windows Mobile。我怀疑这只是 CE 中的一个错误,升级将修复。
干杯