มีคำสั่งที่ฉันสามารถใช้ในสคริปต์เพื่อบังคับให้ SSMS เปิดใช้งาน / ปิดใช้งานโหมด SQLCMD หรือไม่
มีคำสั่งที่ฉันสามารถใช้ในสคริปต์เพื่อบังคับให้ SSMS เปิดใช้งาน / ปิดใช้งานโหมด SQLCMD หรือไม่
คำตอบ:
อย่างที่บอกไปแล้วว่ามันไม่มีทาง
อย่างไรก็ตามสิ่งหนึ่งที่เราทำคือการรวมการตรวจสอบอย่างรวดเร็วในส่วนหัวของสคริปต์ของเราเพื่อตรวจสอบว่าโหมด SQLCMD เปิดอยู่ (และยุติสคริปต์ถ้าไม่):
:setvar DatabaseName "MyDatabase"
GO
IF ('$(DatabaseName)' = '$' + '(DatabaseName)')
RAISERROR ('This script must be run in SQLCMD mode. Disconnecting.', 20, 1) WITH LOG
GO
-- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors
IF @@ERROR != 0
SET NOEXEC ON
GO
PRINT 'You will not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
มีเหตุผลที่ใช้ความรุนแรง 20 มันมีแนวโน้มที่จะฆ่าการเชื่อมต่อทันทีป้องกันรหัสสคริปต์ใด ๆ เพิ่มเติมจากการทำงานแม้ว่าจะมีตัวGO
ยุติแบทช์ในสคริปต์ในภายหลัง
ระบุปัญหาของระบบและเป็นข้อผิดพลาดร้ายแรงซึ่งหมายความว่างานโปรแกรมฐานข้อมูลที่กำลังดำเนินการคำสั่งหรือชุดงานจะไม่ทำงานอีกต่อไป งานบันทึกข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นแล้วจึงยุติ ในกรณีส่วนใหญ่การเชื่อมต่อการประยุกต์ใช้อินสแตนซ์ของฐานข้อมูลเครื่องยนต์ยังอาจยุติ หากสิ่งนี้เกิดขึ้นขึ้นอยู่กับปัญหาแอปพลิเคชันอาจไม่สามารถเชื่อมต่อใหม่ได้
ข้อความแสดงข้อผิดพลาดในช่วงนี้อาจส่งผลกระทบต่อกระบวนการทั้งหมดที่เข้าถึงข้อมูลในฐานข้อมูลเดียวกันและอาจระบุว่าฐานข้อมูลหรือวัตถุเสียหาย ข้อความแสดงข้อผิดพลาดที่มีระดับความรุนแรงตั้งแต่ 19 ถึง 24 จะถูกเขียนไปยังบันทึกข้อผิดพลาด
SET NOEXEC ON
เป็นมาตรการความปลอดภัยเพิ่มเติมเพื่อป้องกันสิ่งอื่นใดในสคริปต์จากการทำงาน
เลขที่
แต่คุณสามารถเรียกใช้ในโหมด SQLCMD ได้ตลอดเวลาและมี T-SQL ไว้ในนั้น
ในการสร้างความแตกต่างที่ชัดเจนระหว่างคำสั่ง SQLCMD และ Transact-SQL คำสั่ง SQLCMD ทั้งหมดจะต้องนำหน้าด้วยโคลอน (:)