ユーザー定義のスカラー関数内に次の 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 int not null 主キー フィールドを 1 つ持つまったく新しいテーブルを作成し、1 ~ 6097 を入力して上記のクエリを実行しましたが、「6097」という予期しない結果が返されることはありません。これは、私が SQL Server で経験した中で最も紛らわしい問題です。そのため、誰かが私を指摘する方向性を持っている場合は、大いに感謝します. ありがとう!