首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLPackage后部署脚本未运行

SQLPackage后部署脚本未运行
EN

Stack Overflow用户
提问于 2016-02-09 17:49:50
回答 2查看 4.5K关注 0票数 1

我正在使用2013与TFS,通过SQL-Server 2012。具体来说,我在VS中使用Server数据工具来进行SQL开发,而不是在中。

简而言之,部署后的SQL脚本似乎不是由SQLPackage执行的.

具体内容是:我有一个VS SQL数据库项目'ADMIR',它在过去几周一直在开发,并且在SQL和它的部署方面逐渐变得更加复杂。数据库包含一些动态生成的表,因此我引入了some变量来引用两个数据库(一个是实际的ADMIR数据库,另一个是同一服务器上的DB )。因此,我将数据库引用添加到这两个DB的dacpacs中。

阿德米尔项目将建设得很好。

还有一个部署后SQL脚本,在引入Deployment变量之前,这也会运行良好并初始化各种表数据。

但是,我的理解是SQL命令变量不能使用VS/TFS发布操作,因为部署后脚本不再被执行。

这是可以的,因为我最终想要编写/自动化ADMIR项目的发布/部署,所以我开始使用SQLPackage来执行发布。

同样,这似乎很好--我的SQL包批处理命令将执行并记录错误/输出(视情况而定),并成功地将构建dacpac发布到目标服务器。然而,它似乎完全忽略了部署后脚本。此外,输出报告没有设置SQL命令变量。

这些是各种脚本和配置设置:

SQLPackage批处理命令:

代码语言:javascript
复制
::Publish the ADMIR database using the ADMIR.DEV.Publish.xml Profile.
"C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\SqlPackage.exe" 
    /Action:Publish 
    /Profile:"C:\Source Control\ADMIR\ReleaseControl\ADMIR.DEV.publish.xml"
    /SourceFile:"C:\Source Control\ADMIR\Build\ADMIR.dacpac"
    2> "C:\Source Control\ADMIR\ReleaseControl\Publish_Error.txt" 
    > "C:\Source Control\ADMIR\ReleaseControl\Publish_Output.txt"

ADMIR.DEV.publish.xml发布配置文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>ADMIR</TargetDatabaseName>
    <DeployScriptFileName>ADMIR.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=FOOBAR;Integrated Security=True;Pooling=False</TargetConnectionString>
    <ProfileVersionNumber>1</ProfileVersionNumber>
  </PropertyGroup>
  <ItemGroup>
    <SqlCmdVariable Include="ADMIRDatabaseName">
      <Value>ADMIR</Value>
    </SqlCmdVariable>
    <SqlCmdVariable Include="XYZDatabaseName">
      <Value>XYZDEV</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

Script.PostDeploy.sql (前几行):

代码语言:javascript
复制
/* ADMIR Post-Deployment Script Template */
PRINT N'Post Deploy Script started:'+CAST(GETDATE() AS NVARCHAR(20))+N'.'
PRINT N'SQLCMD Variable $ADMIRDBName:'+[$(ADMIRDatabaseName)]+N'.'
PRINT N'SQLCMD Variable $XYZDBName:'+[$(XYZDatabaseName)]+N'.'

/* Purge existing data as we'll repopulate with what is required for a fresh deploy */
PRINT N'Purging existing table data...'
DELETE FROM [ADMIR].[Engine].[ProcessingStatus]
DELETE FROM [ADMIR].[Engine].[DataField]
DELETE FROM [ADMIR].[Engine].[DataKeyField]
...
...

在运行构建时,我可以看到ADMIR_Create.sql脚本确实包含所有Post语句。也就是说,我可以在这个文件中看到上面的代码行。

** ADMIR.sqlproj文件包含部署后脚本和SQL变量:**

代码语言:javascript
复制
<ItemGroup>
    ...
    ...
    <PostDeploy Include="ReleaseControl\Script.PostDeploy.sql" />
</ItemGroup>
...
...
<ItemGroup>
<SqlCmdVariable Include="ADMIRDatabaseName">
  <DefaultValue>ADMIR</DefaultValue>
  <Value>$(SqlCmdVar__7)</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="XYZDatabaseName">
  <DefaultValue>XYZDEV</DefaultValue>
  <Value>$(SqlCmdVar__6)</Value>
</SqlCmdVariable>

发布日志,Publish_Output.txt:

代码语言:javascript
复制
Publishing to database 'ADMIR' on server 'FOOBAR'.
Initializing deployment (Start)
*** The following SqlCmd variables are not defined in the target scripts: ADMIRDatabaseName XYZDatabaseName.
Initializing deployment (Complete)
Analyzing deployment plan (Start)
Analyzing deployment plan (Complete)
Updating database (Start)
Update complete.
Updating database (Complete)
Successfully published database.

所以:

  1. 为什么部署后脚本没有被执行?我没有看到任何与之相关的日志信息。
  2. 为什么SQLPackage输出日志在发布配置文件中没有定义SQLPackage变量?
  3. .sqlproj文件是否正确,将SqlCmdVar__7变量本身的值作为变量,例如$(SqlCmdVar__7)?__6 & __7从哪里来?

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-09-08 19:53:20

我发现在VisualStudio2017中创建的新.sqlproj文件不包括“默认”Predeployment.sqlPostDeployment.sql文件,因此我手动添加了一个。

发布没有执行PostDeployment.sql,因为文件的Build Action设置为None。将Build Action更改为PostDeploy解决了问题。

票数 1
EN

Stack Overflow用户

发布于 2016-02-16 15:09:32

据我的评论,在MSDN连接中登录的问题似乎是有原因的。例如,与数据库的dacpac同名的SQLCMD变量将导致脚本不被执行。当我删除此引用并将相关的SQLCMD变量更改为DB名称的文字值时,项目将根据需要构建并执行后部署脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35298743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档