【问题标题】:Using variable in sql postdeployment build script?在 sql postdeployment 构建脚本中使用变量?
【发布时间】:2014-10-03 11:31:53
【问题描述】:

我想做的是能够在 Visual Studio 数据库项目中创建一个发布 xml 脚本,该脚本定义一个变量,用于编写脚本

我的问题是出现错误:“SQL72008:未定义变量 DeployType。”如果我没有像这样在部署后脚本中定义变量 ":setvar DeployType "varchar(100)"

当我运行 publish.xml 时,DeployType 参数被正确设置在生成脚本的顶部但是该值被“:setvar DeployType”varchar(100)“覆盖。所以完成这项工作,我需要在运行此脚本之前手动删除该行。

所以问题是如何在不默认部署后脚本中的 setvar 变量的情况下让项目构建并能够发布?

这是我的 PostDeployment.sql 文件的内容如果不默认 DeployType 变量就无法构建

--The line causing my problems. I would like to skip it somehow.
:setvar DeployType "varchar(100)"

Print 'Always include core'
:r ..\Data\Core\_BaseCore.sql

--Conditionaly add based on DeployType comming from the publishing.xml
IF ('$(DeployType)' = 'A')
BEGIN
:r ..\Data\A\_BaseKnap.sql
END
ELSE IF ('$(DeployType)' = 'B')
BEGIN
:r ..\Data\B\_BaseB.sql
END

这是 Database.publish.xml 文件中的内容

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
   <IncludeCompositeObjects>True</IncludeCompositeObjects>
   <TargetDatabaseName>db name</TargetDatabaseName>
   <DeployScriptFileName>Database.sql</DeployScriptFileName>
   <ProfileVersionNumber>1</ProfileVersionNumber>
   <TargetConnectionString>Connection string</TargetConnectionString>
 </PropertyGroup>
 <ItemGroup>
   <SqlCmdVariable Include="DeployType">
     <Value>B</Value>
   </SqlCmdVariable>
 </ItemGroup>
</Project>

当我将它发布到脚本文件时这是生成的脚本,将针对我得到的数据库运行(不需要删除很多东西)。

:setvar DeployType "B"

--This nulls out the DeployType set before
:setvar DeployType "varchar(100)"

Print 'Always include core'
:r ..\Data\Core\_BaseCore.sql

--Conditionaly add based on DeployType comming from the publishing.xml
IF ('$(DeployType)' = 'A')
BEGIN
:r ..\Data\A\_BaseKnap.sql
END
ELSE IF ('$(DeployType)' = 'B')
BEGIN
:r ..\Data\B\_BaseB.sql
END

运行它(例如在 Sql Manager 中)结果是

Print 'Always include core'

它没有进入 IF 语句,因为它已被默认。

希望这已经足够清楚了。

【问题讨论】:

    标签: sql msbuild sqlcmd database-project


    【解决方案1】:

    我知道这是一个有点旧的线程,但这里是答案:

    单击数据库项目的属性并导航到“SQLCMD 变量”窗口。在 SQLCMD 变量表中定义您的 $(DeployType) 变量。这将允许项目编译,因此您可以(并且实际上需要)从脚本本身中删除行 :setvar DeployType "varchar(100)"

    【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 2013-08-24
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多