Даже проще, чем ответ Andomar, и если предположить, что id никогда не равен 0 (как для большинства идентификаторов с автоинкрементом), то равен
SELECT Team.teamID
FROM Team
WHERE @teamid = 0 or Team.teamID = @teamid;
Этот предикат всегда имеет значение true, когда @teamid равен нулю, а в противном случае - только true, когда он соответствует идентификатору команды конкретной строки.
Обратите внимание: это работает довольно эффективно на Sybase 11 или выше; он работал довольно неэффективно на MS SQL Server 2003; Я не знаю, как это работает в текущей версии MS SQL Server.
Также вы можете использовать чехол; Вы просто должны поместить case в предложении where, а не в предложении where в случае. Итак, ваш оригинальный запрос будет:
Select Team.teamID
From Team
where
case when @teamid = 0 then 0 else Team.teamID end = @teamId;
Обратите внимание, что это, вероятно, будет менее эффективным, так как оно должно быть оценено для каждой строки и также может привести к полному сканированию таблицы.
Приведенная выше форма, скорее всего, будет переписана интеллектуальным оптимизатором запросов (ваш пробег зависит от вашей СУБД), чтобы использовать индекс, если @teamid не равен нулю.