我正在尝试像这样运行命令:
SELECT PITANJEID, NASLOV, ODGOVOR1, ODGOVOR2, ODGOVOR3, ODGOVOR4, ODGOVOR5, POENA, PITANJE
FROM KVIZ_PITANJA
WHERE KVIZ_GRUPA_ID = COALESCE(@ID, ANY(SELECT KVIZ_GRUPA_ID FROM KVIZ_PITANJA))
问题出在这里我得到了错误:
令牌未知ANY
当我仅使用Coalesce(2, 1)
运行命令时,它会正常运行。
当我仅使用Any(select kviz_grupa_id from kviz_pitanja)
运行命令时,它也可以正常工作。
为什么将这两个命令放在一起会出现此错误?
如果用户将null
作为参数完全不使用where
命令作为参数,我想实现这一点,所以我想尝试这种方法。
答案 0 :(得分:4)
SOME和ANY必须先进行比较操作(=,<,>等),因此将其嵌入到COALESCE中会导致错误。似乎您要说的是“如果有@ID,请先查找,否则返回所有内容。”如果是这样,您可以使用此结构(在SSRS应用程序中很常见):
SELECT PITANJEID, NASLOV, ODGOVOR1, ODGOVOR2, ODGOVOR3, ODGOVOR4, ODGOVOR5, POENA, PITANJE
FROM KVIZ_PITANJA
WHERE (KVIZ_GRUPA_ID = @ID OR @ID IS NULL)