Hanya untuk menjadi ekstra "defensif", versi berikut menghasilkan kesalahan konversi Jenis untuk memperhitungkan kemungkinan (namun tidak mungkin)> 1 pencocokan Schema
mirip dengan bagaimana kode validasi sering kali sengaja Lempar Pengecualian karena saya yakin itu baik untuk dan saya percaya itu "'Praktik terbaik'" untuk memperhitungkan semua kemungkinan hasil pengembalian namun tidak mungkin dan bahkan jika itu hanya untuk menghasilkan pengecualian fatal karena efek penghentian pemrosesan yang diketahui biasanya lebih baik daripada efek berjenjang yang tidak diketahui dari kesalahan yang tidak terperangkap. Karena sangat tidak mungkin, menurut saya tidak ada gunanya melakukan Count
pemeriksaan terpisah + Throw
atau Try
- Catch
- Throw
untuk menghasilkan kesalahan fatal yang lebih ramah pengguna tetapi tetap saja kesalahan fatal.
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
Kemudian:
if @HasSchemaX = 1
begin
...
end -- if @HasSchemaX = 1