2012-03-07 29 views
11

我們有幾個SQL腳本,它們是從實體模型生成的,它們需要以正確的順序運行+有幾個填充腳本,它們將一些測試數據插入到數據庫中。如何在sql文件中包含sql文件? MS SQL

現在我需要在正確的順序Visual Studio中打開這些所有的腳本,然後單擊執行SQL(CTRL移E)

有沒有一種方法來創建類似Master.sql和裏面我想用一些包括。像這樣:

BEGIN TRANSACTION 

ImportOrInclude myDB1.sql 
ImportOrInclude myDB2.sql 
... 

COMMIT 

我需要這隻從視覺工作室運行,這不會是應用程序本身的一部分。

如何做到這一點?

編輯

我發現有個東西叫SQLCMD腳本,可以導入SQL文件 http://msdn.microsoft.com/en-us/library/aa833281%28v=vs.80%29.aspx

但我的問題是,那麼如何獲取當前解決方案的目錄路徑進入: ř命令

編輯2

所以我發現如何去做,並不完美,但工作。 糟糕的是$(SolutionDir)沒有從VS變量中加載,所以你需要手動設置它。 此代碼是指在Visual Studio中運行:

-- turn on in menu: Data -> Transact SQL editor -> SQL CMD mode 
-- set this to path where the .sln file is. 
:setvar SolutionDir C:\_work\projectname\ 

:!! echo $(SolutionDir)Maa.EntityModel.All\DbWEntityModel.edmx.sql 
:r $(SolutionDir)Maa.EntityModel.All\DbWEntityModel.edmx.sql 
go 

:!! echo $(SolutionDir)Maa.EntityModel.All\DblQEntityModel.edmx.sql 
:r $(SolutionDir)Maa.EntityModel.All\DbQEntityModel.edmx.sql 
go 

回答

14

Use sqlcmd utility

提取您可能會感興趣:

-i input_file[,input_file2...] 

標識包含一批SQL語句或存儲過程的文件。可以指定多個文件,這些文件將按順序讀取和處理。不要在文件名之間使用任何空格。 sqlcmd將首先檢查是否存在所有指定的文件。如果一個或多個文件不存在,sqlcmd將退出。

例子:

sqlcmd -dDataBaseName -E -Stcp:ServerName\instancename -imaster.sql 

Master.Sql:

:r file1.sql 
:r file2.sql 
+0

謝謝你,但我不工作。只有:r – 2012-03-07 10:21:22

+0

確實如此,我剛剛測試過它。 – 2012-03-07 10:45:06

+0

我試圖使用包含在visual studio中的sql命令,它以不同的方式工作 – 2012-03-07 10:52:28

0

使用隨SQL Server來做到這一點的Business Intelligence Development Studio。創建一個新的SSIS包。在這個包裏面,爲每個文件在控制流中創建幾個Execute SQL Tasks,並設置SQLSourceTypeFileConnection並選擇你的文件。