2012-03-08 69 views
0

我們有很多SQL Server腳本。但是有一些關鍵腳本只能在特定條件下的特定時間運行。有沒有辦法通過某種彈出警告來保護我們自己?有沒有'你確定要繼續嗎?' SQL命令?

即當這些關鍵腳本運行時,是否有命令詢問用戶是否要繼續?

(我們已經制作了一些回滾腳本來處理這些腳本,但最好不要意外運行)。

回答

4

不,沒有這樣的事情。

你可以編寫一個應用程序(windows服務?),它只會在應該運行腳本時運行。

事實上,你甚至問這個問題表明,這是應該自動化的東西,越早越好。

您可以通過使用if來測試這些條件,並且只有在符合條件時才執行,從而緩解問題。如果這是一系列腳本,則應將其包裝在事務中以引導。

+2

+1 - SQL腳本**不交互**。 – JNK 2012-03-08 16:19:04

0

sql是一種查詢語言。沒有能力接受用戶輸入。

唯一我能想到的就是讓它變@驅動。第一部分應更新@shouldRunSecond = 1,第二部分應包裝在

if @shouldRunSecond = 1 
begin 
    ... 
end 

如果不需要,第二部分將被跳過。

1

一個工作周圍,你可以使用如下,這將要求您更新另一個表中的值:

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或會話,手動更新表在它繼續之前。

這對於多個過程來說會變得複雜得多,所以它只能作爲一個非常短期的解決方法。

0

問題是 - 這些腳本位於何處? 如果您將它們作爲每次運行之前打開的.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

0

我已經看到包含SQLCMD ...的批處理腳本,因此您可以在代碼或管理工作室中運行.sql腳本,而不必在腳本中添加提示。