只是为了更加“防御”,以下版本会生成一个类型转换错误,以解释 > 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