Есть ли «Вы уверены, что хотите продолжить?»Команда SQL? - PullRequest
0 голосов
/ 08 марта 2012

У нас есть много сценариев SQL Server. Но есть несколько критических сценариев, которые должны выполняться только в определенное время при определенных условиях. Есть ли способ защитить нас от самих себя с помощью всплывающего предупреждения?

т.е. Когда эти критические сценарии выполняются, есть ли команда, чтобы спросить пользователя, хотят ли они продолжить?

(Мы уже сделали несколько сценариев отката, чтобы справиться с ними, но лучше, чтобы они вообще не запускались случайно).

Ответы [ 5 ]

4 голосов
/ 08 марта 2012

Нет, такого нет.

Вы можете написать приложение (служба Windows?), Которое будет запускать сценарии только тогда, когда они должны быть.

Тот факт, что вы даже задаете вопрос, показывает, что это нужно автоматизировать, чем раньше, тем лучше.

Тем временем проблему можно смягчить, используя if для проверки этих условий и выполнения только при их выполнении. Если это серия сценариев, вам нужно заключить их в транзакции для загрузки.

1 голос
/ 08 марта 2012

Одно из возможных решений - это следующее, для которого вам потребуется обновить значение в другой таблице:

CREATE PROC dbo.MyProc
AS

WHILE (SELECT GoBit FROM dbo.OKToRun) = 0
BEGIN
    RAISERROR('Waiting for GoBit to be set!', 0,1)
    WAITFOR DELAY '00:00:10'
END

UPDATE dbo.OKtoRun
SET GoBit = 0

... DO STUFF ...

Для этого потребуется в другом спиде или сеансе обновить эту таблицувручную, прежде чем это продолжится.

Это становится намного сложнее с несколькими процедурами, поэтому он будет работать только как очень краткосрочный обходной путь.

0 голосов
/ 25 августа 2014

Я видел пакетные сценарии, содержащие SQLCMD ..., поэтому вместо запуска сценария .sql из кода или студии управления вы можете добавить подсказку в сценарий.

0 голосов
/ 09 марта 2012

Вопрос - где находятся эти скрипты? Если у вас есть файл .sql, который вы открываете каждый раз перед запуском, вы можете просто добавить несколько «магических чисел» перед началом скрипта, которые вам придется вычислять каждый раз перед запуском. В приведенном ниже примере каждый раз перед запуском сценария необходимо указать правильную дату и минуту в условии IF, другой мудрый сценарий не будет запускаться

IF DATEPART(dd,GETDATE())!=5 or DATEPART(mi,(GETDATE()))!=43
BEGIN
    RAISERROR ('You have tried occasionally to run your dangerous script !!!',16,1);
    RETURN
END

--Some dangerous actions
drop database MostImportantCustomer
update Personal set Bonus=0 where UserName=SUSER_SNAME()

Если ваши скрипты находятся в хранимой процедуре - вы можете добавить какой-нибудь параметр «Я уверен, я знаю, что я делаю», где вы всегда будете передавать, например, Минуту, умноженную на День. Hote это помогает

0 голосов
/ 08 марта 2012

sql это язык запросов.не имеет возможности принимать пользовательские данные.

Единственное, о чем я могу думать, это иметь @variable управляемый.первая часть должна обновить @shouldRunSecond = 1. а вторая часть должна быть обернута в

if @shouldRunSecond = 1
begin
   ...
end

, вторая часть будет пропущена, если не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...