воскресенье, 27 апреля 2008 г.

Предотвращение нежелательного запуска T-SQL

Для работы с базами данных все мы часто пользуемся продуктом SQL Server Managment Studio (или альтернативный инструмент).
Иногда приходится работать одновременно с несколькими базами данных или даже инстансами. Возникает ситуация когда у вас открыто большое количество скриптов, причём название базы данных к которой подключен тот или иной скрипт бывает трудно увидеть и можно, по ошибке запустить скрипт в контексте не той БД которой хотелось.

Например, для того чтобы предотвратить запуск кода на неправильном инстансе можно воспользоваться глобальной переменной @@SERVERNAME

IF @@SERVERNAME = 'ProdSQL'
BEGIN
PRINT
'*** код запустится только на нужном инстансе ***'
RETURN
END


Для того чтобы убедиться что скрипт запускается в правельной БД можно использовать в начале скрипта строчку USE DATABASE_NAME, но есть и другой способ - использовать функцию DB_NAME().

IF DB_NAME() = 'Master'
BEGIN
PRINT 'код запустится в нужной БД'
RETURN
END

Применение USE DATABASE_NAME можно считать более предпочтительным потому что позволяет не только предотвратить запуск в неправельной БД, но и совершить переход в нужную.

Можно пойти дальше и запретить запуск части кода T-SQL в нежелательные моменты времени. Напимер этот код не будет запускаться в выходные.

IF DATEPART(dw,GETDATE()) = 1 OR DATEPART(dw,GETDATE()) = 7
BEGIN
PRINT 'код запустится только в рабочие дни недели'
RETURN
END

Описанные выше приёмы кажуться немного параноидальными, однако могут съэкономить время, предотвратив необходимость удаления ошибочно появившихся записей или восстановления из резервной копии в случае случайного удаления данных.

Ссылки:

http://www.mssqltips.com/tip.asp?tip=1241


Комментариев нет:

Locations of visitors to this page