Щоб бути додатково "захисним", наступна версія генерує помилку перетворення типу, щоб врахувати можливість (хоч і малоймовірну) відповідності> 1 Schema
, подібну до того, як код перевірки часто навмисно кидає винятки, тому що я вважаю, що це добре, і я вважаю, що це "" найкраща практика "" враховувати всі можливі результати повернення, проте малоймовірні, навіть якщо це просто генерування фатального винятку, оскільки відомі ефекти зупинки обробки зазвичай кращі за невідомі каскадні ефекти незахоплених помилок. Оскільки це дуже малоймовірно, я не вважав, що варто важити клопоту про окрему Count
перевірку + Throw
або Try
- Catch
- Throw
для створення більш зручної фатальної помилки, але все одно фатальної помилки.
SS 2005-:
declare @HasSchemaX bit
set @HasSchemaX = case (select count(1) from sys.schemas where lower(name) = lower('SchemaX')) when 1 then 1 when 0 then 0 else 'ERROR' end
SS 2008+:
declare @HasSchemaX bit = case (select count(1) from sys.schemas where lower(name) = lower('SchemaX')) when 1 then 1 when 0 then 0 else 'ERROR' end
Тоді:
if @HasSchemaX = 1
begin
...
end -- if @HasSchemaX = 1