2013-10-18 81 views
0

我希望在工具/腳本中自動使用代碼將調用替換爲存儲過程。最好用一個例子來解釋。Sql:使用存儲過程代碼替換存儲過程調用的腳本

我有這樣的代碼,其中一個存儲過程調用兩次

declare @x int, @y int 
set @x = 10 
exec @y = calculate_and_insert @x 

set @x = @y 
exec @y = calculate_and_insert @x 

被調用過程具有類似代碼:

create stored procedure calculate and insert @in int 
as 
    declare @x int 
    set @x = 10 
    return @x + @in 

看到它具有相同名稱的變量一個在外部示波器

我想生成類似:

declare @x int, @y int 
set @x = 10 
    declare @cai1_in int 
    set @cai1_in = @x 

    declare @cai1_x int 
    set @cai1_x = 10 
    set @y = @cai1_x + @cai1_in 

set @x = @y 
    declare @cai2_in int 
    set @cai2_in = @x 

    declare @cai2_x int 
    set @cai2_x = 10 
    set @y = @cai2_x + @cai2_in 

也許有人已經需要做類似的事情。原因是我有很多存儲過程,我不想在生產中進行更改,但是我想執行一個新版本來查看結果。我會在測試中重新編碼它們並生成一個腳本。

我不必通過SQL來完成,可以用另一種語言來完成。它也不必涵蓋所有情況。

+0

你試圖用存儲過程中的邏輯替換對存儲過程的調用嗎? – Andrew

+0

@安德魯:確切! – neves

+1

哇。我當然不知道你通過T_SQL做了什麼。我想你可以寫一個Java程序或其他東西來解析所有的腳本並做適當的修改,但這聽起來很複雜。另外,您必須生成所有適當的腳本並將它們保存爲文件。聽起來很可怕。 – Andrew

回答

1

爲什麼不創建一個名爲calculate_and_insert2的新存儲過程,只需更改腳本即可調用新過程。這比你最初的建議要少得多。

+0

因爲這只是一個簡單的例子。有很多電話。另外,因爲我沒有在數據庫中創建任何內容的權限,只是爲了執行(不要問)。 – neves

+0

@ neves有更多的電話,更好的acfrancis的建議變得越糟糕,你的方法就越糟糕。解決您的權限問題會更好。我保證它會花費更少的時間和精力。 – RBarryYoung