2012-01-10 72 views
3

我想編寫一個TSQL存儲過程,它創建一個具有指定名稱的數據庫,並預先使用某個模式填充它。如何在存儲過程中使用模式創建新的數據庫?

於是我就用大量的EXEC聲明:

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)'); 

等,具有一定的CREATE PROCEDURECREATE FUNCTION一起等。但是,問題來自於當我想創建一個類型,CREATE TYPE語句不能指定了數據庫,並且在存儲過程中不能有USE @dbName

如何在存儲過程的另一個數據庫中創建一個類型?

+3

爲什麼你想創建一個存儲過程中的數據庫和模式???這似乎有點奇怪 - 通常,DML語句不應該從存儲過程中執行 - 您只需執行一次設置您的環境,然後完成它。 – 2012-01-10 16:39:56

+1

我想創建任意數量的數據庫在我們的應用程序的輸入上(每個客戶一個數據庫) – thecoop 2012-01-10 16:57:53

+1

創建數據庫備份,然後每次要添加一個新的邏輯名稱和文件名時恢復它。 – 2012-01-10 17:00:51

回答

-1

您或許想看看sp_addtype。你可以在你想要的數據庫中執行它。

-1

你也可以使用此功能,例如:

EXEC('use ' + @dbName + ';create type somename from int not null;') 

這將創建類型之前,選擇正確的數據庫。

5

有一些命令不能用作ssarabando建議,其中有CREATE SCHEMA,在使用該技術時拋出Msg 111

的解決辦法是巢動態SQL塊如下:

exec('use tempdb; exec sp_executesql N''create schema test'' ') 

外塊不執行任何操作,除了更改數據庫,以便在執行時它的內塊具有正確的上下文。

請注意,sp_executesql的內部參數需要兩個單引號。

相關問題