我在用户定义的标量函数中有以下 SQL 查询:
declare @csv varchar(8000)
select @csv =
COALESCE(@csv + ', ' + CAST(CallID as varchar(10)),
CAST(CallID as varchar(10)))
from calls
where 1=1 --@csv = '6097'
callid = callid --@csv = '1, 2, 3'...
callid <= 10000 --always true, expected result (@csv = '1, 2, 3'...)
order by callid
select @csv
如果我使用 1=1 where 条件,我会得到 @csv = '6097' (表中的最大 CallID)。如果我使用 callid=callid, callid <= 10000,我会得到预期的结果:@csv = '1, 2, 3, '... 如果我删除 WHERE 或 ORDER BY 子句,这也是结果。
有谁知道为什么会发生这种情况?我有另一个案例发生,但功能有点复杂。我创建了一个带有一个 ID 非空主键字段的全新表,用 1-6097 填充它,并尝试了上面的查询,它从来没有给我“6097”的意外结果。这是我在使用 SQL Server 时遇到的最令人困惑的问题,因此,如果有人能指出我的方向,我将不胜感激。谢谢!