本来空行を返すSQLで1行返す
例えば、ユーザIDからユーザの今の状態を引っ張ってきたいときに、
SELECT state FROM Users WHERE id = @uid;
とかってやると、見つからなかった場合に空行が返ってくる。
これがいやな場合はこうする*1。
SELECT state FROM Users WHERE id = @uid UNION ALL -- 見つからなかった場合、stateとして-1を返す SELECT -1 WHERE NOT EXISTS(SELECT * FROM Users WHERE id = @uid);
これで、元のSQLで見つかった場合は空行がUNION ALLされ、見つからなかった場合は空行に-1がUNION ALLされるから、絶対に空行を返さない。
元のSQLでidがPKなら、常に1行返ってくることが保証されるから、ホスト言語側で場合分けをする必要がなくなる。
*1:SQL Serverでしか試してない