我们有很多SQL Server脚本。但是有一些关键脚本只能在特定条件下的特定时间运行。有没有办法通过某种弹出警告来保护我们自己?有没有'你确定要继续吗?' SQL命令?
即当这些关键脚本运行时,是否有命令询问用户是否要继续?
(我们已经制作了一些回滚脚本来处理这些脚本,但最好不要意外运行)。
我们有很多SQL Server脚本。但是有一些关键脚本只能在特定条件下的特定时间运行。有没有办法通过某种弹出警告来保护我们自己?有没有'你确定要继续吗?' SQL命令?
即当这些关键脚本运行时,是否有命令询问用户是否要继续?
(我们已经制作了一些回滚脚本来处理这些脚本,但最好不要意外运行)。
不,没有这样的事情。
你可以编写一个应用程序(windows服务?),它只会在应该运行脚本时运行。
事实上,你甚至问这个问题表明,这是应该自动化的东西,越早越好。
您可以通过使用if
来测试这些条件,并且只有在符合条件时才执行,从而缓解问题。如果这是一系列脚本,则应将其包装在事务中以引导。
sql是一种查询语言。没有能力接受用户输入。
唯一我能想到的就是让它变@驱动。第一部分应更新@shouldRunSecond = 1,第二部分应包装在
if @shouldRunSecond = 1
begin
...
end
如果不需要,第二部分将被跳过。
一个工作周围,你可以使用如下,这将要求您更新另一个表中的值:
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 ...
这需要你,在另一个SPID或会话,手动更新表在它继续之前。
这对于多个过程来说会变得复杂得多,所以它只能作为一个非常短期的解决方法。
问题是 - 这些脚本位于何处? 如果您将它们作为每次运行之前打开的.sql文件,那么您可以在脚本开始之前简单地添加一些“幻数”,以便在运行之前每次都必须进行计算。在例如每次下面你运行你的脚本之前,你必须把正确的日期和分进入IF fondition,其他明智的脚本将不会运行
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 it helps
我已经看到包含SQLCMD ...的批处理脚本,因此您可以在代码或管理工作室中运行.sql脚本,而不必在脚本中添加提示。
+1 - SQL脚本**不交互**。 – JNK 2012-03-08 16:19:04