2012-10-02 50 views
0

我正在嘗試動態創建表。來自一個數據庫(@sourcedatabase)的表格用於在另一個數據庫(@targetdatabase)中創建表格。在T-SQL中創建server.database.table的動態路徑

這個工作正常,當我明確命名數據庫。但是,我希望它們是動態的,如下例所示。我已經閱讀了很多關於這一點,我很好,使用像

set @sql = 'DROP TABLE ' + @targetdatabase + '.' + @SomeNAME 
execute (@sql) 

,但我在的時候它變得更復雜一點茫然:

declare @sourcedatabase as varchar(max) = 'DATABASE1' 
declare @targetdatabase as varchar(max) = 'DATABASE2' 

declare @HighestID as int = (SELECT max(Id) FROM @sourcedatabase.system.Organisationtype) 
declare @i as int = (SELECT max(Id) FROM @sourcedatabase.system.Organisationtype) 

while @i >= (SELECT min(Id) FROM @sourcedatabase.system.LaagTypeOrganisatie) 
BEGIN 
--SOME ACTIONS 
set @i = @i + 1 
END 

declare @x as int = (select count(*) from @targetdatabase.sys.tables where name = @SomeNAME) 

IF @x <> 0 
BEGIN 
set @sql = 'DROP TABLE ' + @targetdatabase + '.' + @SomeNAME 
execute (@sql) 
END 

正如你看到的我想有數據庫命名變量。 將整個腳本轉換爲一個exec語句非常複雜,閱讀起來不太漂亮。 在文本文件中讀取此腳本,在@targetdatabase en @sourcedatabase上進行替換然後執行它會是一個想法嗎?如果是這樣,這將如何完成?

我期待着您的意見和貢獻!

編輯:腳本作爲jobagent

回答

0

目前尚不清楚如何執行你的腳本執行,但假設您使用的是sqlcmd.exe或SSMS可以使用sqlcmd scripting variables在運行時的變量替換。