2009-12-18 105 views
3

我想開發一個腳本,我將能夠在SQL Server 2008 [Express]數據庫上運行。數據庫包含大約10-15個表格,這些表格正在使用不同的值/新字段進行更新等。暫停SQL服務器腳本?

但是,它不是一個完全自動化的過程,並且在升級過程中,暫停執行腳本,在腳本中放置一個消息框,允許用戶執行<something>。單擊該腳本上的確定將繼續它的執行並完成遷移。

這樣的事情是否存在?

回答

2

沒有直接的方法可以讓T-SQL腳本暫停並等待用戶輸入。 WAITFOR命令將導致執行等待指定的時間段,但不允許用戶交互。

一個(非常)粗略的解決方案是將進程分解成小的腳本塊並通過一個良好的老式BATCH腳本控制它們的執行。例如: -

SQLCMD -S <servername> -E -I <path_to_script_one> 
PAUSE 
SQLCMD -S <servername> -E -I <path_to_script_two> 

顯然這種方法也有一些缺點;由於沒有簡單的方法來確定成功或失敗,錯誤處理變得麻煩和有問題。儘管不同的腳本語言可能提供更多的功能,但BATCH命令相對有限。

如果您允許用戶輸入導致動態SQL語句的參數值,則存在安全問題。

如果你想要一個「豐富」的經驗,你應該考慮與您所選擇的工具來構建UI ...

0

您可以使用WAITFOR暫停。我懷疑你實際上是否可以從T-SQL腳本中彈出消息框

+0

WAITFOR暫停一段設定的時間,或直到設定的日期/時間。用戶無法手動重新啓動腳本。 – 2009-12-18 12:13:56

+0

或直到查詢返回行或超時。 – 2009-12-18 12:15:31

0

SQL Server腳本不支持任意暫停和重新啓動執行。

SQL 2008 Management Studio的調試功能使您能夠在一個或多個斷點處暫停腳本,但無法保證用戶正在從該環境執行腳本。

如果您需要將腳本暫停未定義的時間以供用戶執行操作,則最簡單的方法是將其分割到多個腳本文件中。

如果您需要自動執行此操作,則可以使用腳本之間的DOS PAUSE命令從.cmd文件觸發它們。