2015-03-13 29 views
0

我的任務是在我們的模擬服務器中自動化數據庫修改腳本。什麼是最好的運行SQL腳本存儲在文本列?

每個模擬都會生成一些數據庫,所有數據庫都基於一個空的公共基礎數據庫。

但現在需要做同樣的事情來獲取去年模擬數據庫中的數據。

我設計根據我們需要的時候創建一個基於備份的數據庫的克隆。並應用從數據庫創建到現在的所有數據庫更改。

所以我想象的機制是可以運行存儲在版本表中的腳本(比如由ER/Studio或SSMS生成的腳本),該腳本將從SQL Agent作業步驟調用。

編輯: 什麼是最簡單的方法做到這一點 - 從SQL代理作業步驟運行存儲在表中的腳本?

P.S .:如果解決方案可以避免xp_cmdShell或sql_cmd,甚至可以在Delphi或SQLCLR函數中預處理腳本,那更好 - 但是如果這是我能應付的唯一方法。

回答

0

您可以運行一個進程,這是否:

create table jobs (step varchar(max)) 
insert into jobs values ('select * from sys.objects') 
insert into jobs values ('select * from sys.databases') 
--create a proc from this code 
declare @curjob nvarchar(max) 
declare @prevjob nvarchar(max) 
select top 1 @curjob= step from jobs order by step 
while @curjob is not null 
    begin 
     exec sp_executesql @curjob 
     set @[email protected] 


select top 1 @curjob = step from jobs 
     where step > @prevjob   
     order by step 
    if @@ROWCOUNT =0 
       break 

     end 
+0

但「sp_executesql的」就明白了「走出去」和這樣的沒有任何預處理? – 2015-03-13 18:54:40

+0

Go不是SQL-它是SSMS查詢窗口命令。你有腳本語言嗎?從我編寫的代碼和從SQL Agent執行proc作爲作業步驟創建一個proc。 – 2015-03-13 18:59:22

+0

所以,我必須在運行前預處理修改腳本。 – 2015-03-13 19:03:58

相關問題