【发布时间】:2011-06-10 00:28:05
【问题描述】:
如何将以下 WHERE CASE 语句更改为 bool 以使该语句起作用?它给了我错误“在预期条件的上下文中指定的非布尔类型的表达式。”
WHERE (dma.DeviceId = @DeviceID AND dma.AssociationStart = @Start AND dma.AssociationEnd = @End) AND
CASE WHEN (dma.AssociationEnd IS NOT NULL)
THEN (SELECT m.TimeStamp FROM Measurements m WHERE m.TimeStamp BETWEEN @Start AND @End)
ELSE
(SELECT m.TimeStamp FROM Measurements m WHERE m.TimeStamp BETWEEN @Start AND (SELECT SYSDATETIMEOFFSET()))
END
【问题讨论】:
-
尝试将
(SELECT SYSDATETIMEOFFSET())更改为SYSDATETIMEOFFSET()。它可能不会直接解决您的问题,但它会使您的代码更易于阅读。 -
查看整个查询,而不仅仅是
WHERE子句对上下文很有用。 -
看起来您缺少比较。在
WHERE子句中,您需要将该CASE语句的结果与其他内容进行比较。 -
也许您可以写下整个 SQL 语句,也许还可以写下表格的一些示例行,以了解您想要实现的目标。