เพียงเพื่อจะได้เสริม "การป้องกัน" รุ่นต่อไปนี้สร้างข้อผิดพลาดประเภทการแปลงไปยังบัญชีสำหรับความเป็นไปได้ ( แต่ไม่น่า) ของ> 1 จับคู่Schema
's คล้ายกับรหัสการตรวจสอบมักจะจงใจโยนข้อยกเว้นเพราะผมเชื่อว่ามันเป็นเรื่องดีที่และผมเชื่อว่ามันเป็น "'แนวทางปฏิบัติที่ดีที่สุด'" เพื่ออธิบายผลลัพธ์ที่เป็นไปได้ทั้งหมด แต่ไม่น่าเป็นไปได้และแม้ว่าจะเป็นเพียงการสร้างข้อยกเว้นที่ร้ายแรงเนื่องจากผลกระทบที่ทราบจากการหยุดการประมวลผลมักจะดีกว่าผลการเรียงซ้อนที่ไม่ทราบสาเหตุของข้อผิดพลาดที่ไม่ติดกับดัก เพราะมันไม่น่าจะสูงผมไม่ได้คิดว่ามันคุ้มค่าปัญหาของแยกCount
เช็ค + Throw
หรือTry
- Catch
-Throw
เพื่อสร้างมิตรกับผู้ใช้ข้อผิดพลาดร้ายแรงมากขึ้น แต่ยังคงมีข้อผิดพลาดร้ายแรงกระนั้น
เอสเอส 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