2014-03-12 69 views
0

在Action = Script中使用sqlpackage,我得到一個部署腳本。但我沒有得到任何副本的屬性複製到輸出目錄=複製總是。使用腳本操作的SQLPackage不會生成任何複製始終腳本

但是,從Visual Studio中發佈時,我確實會得到這些文件。

這是爲什麼?按設計?

我想用sqlpackage(或別的東西),包括這些腳本觸發構建..

回答

2

我們使用這樣的:

msbuild .\DBName\DBName.sqlproj /t:build /p:Configuration="Local" 

sqlpackage /a:script /tsn:TargetServer /sf:.\DBName\sql\Local\DBName.dacpac /pr:.\DBName\Publish\TargetServer.publish.xml /op:.\Scripts\DBName-TargetServer.sql 

(其中TargetServer和數據庫名是有意義的你的項目和dacpac剛剛建成) /A:腳本 - 行動==生成腳本 /SF - dacpac源 /PR - 發佈配置文件使用 /OP - 輸出文件名

我通常結合起來,與以下,以獲得變化的部署報告:

sqlpackage /a:DeployReport /tsn:ServerName /sf:.\DBName\sql\Local\DBName.dacpac /pr:.\DBName\Publish\ServerName.publish.xml /op:.\Scripts\DBName-ServerName.xml 
+0

謝謝Peter,我會研究msbuild,但我也需要包含我的腳本文件。 – SAS

+1

明白了。我在博客上發佈了一堆SSDT。你可以在這裏找到這些帖子:http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html 你可能在每個環境中尋找不同腳本的人是:http:// schottsql。 blogspot.com/2013/05/ssdt-setting-different-permissions-per.html –

+0

@PeterSchott這是否意味着在使用其他操作(如「發佈」)時沒有選擇包含deploymentreport的創建?報告是否必須在分離步驟/執行中創建?這不是浪費資源嗎? – Magier

1

SqlPackage.exe工作對Dacpac文件,如一個由項目建設。這是一個單一的工件,包含將模式部署到數據庫所需的所有信息。它沒有任何不在dacpac中的知識,所以這就是爲什麼使用:/ script不生成這些文件的原因。

如果你想包含一些腳本作爲部署的一部分,爲什麼不把它們標記爲預部署或部署後腳本?這將在dacpac中包含它們並在發佈期間自動執行。如果您有多個腳本,則可以編寫一個主腳本並使用「:r filename」SQLCMD命令來引入其他腳本內容。在構建時,會創建一個合併的postdeployment.sql腳本並保存在dacpac中 - 您可以通過將該文件重命名爲.zip來實際查看內容,這可以幫助您瞭解SqlPackage和其他工具的工作原理。

正如@ Peter-Schott在其他答案中所提到的,如果使用/ t:publish命令,則可以從命令行調用msbuild實際構建項目,甚至直接發佈項目。

+0

謝謝凱文。前/後腳本是一種選擇。我需要多個post和pre部署腳本,並且它們必須根據目標(DEV/TEST/PROD)而有所不同。我打算把所有的補助金和這些文件.. – SAS

+0

那麼,部分可以根據你的變量工作。我做到了這一點,每個環境設置不同的權限。我認爲其他人已經提出了一些有趣的方法來包含/不包括腳本,但我沒有太多玩過。 Ed Elliott在他的博客上可能會有一些想法。 –