gpt4 book ai didi

sql - 在sql部署后构建脚本中使用变量?

转载 作者:行者123 更新时间:2023-12-02 00:12:36 24 4
gpt4 key购买 nike

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

我的问题是收到错误:“SQL72008: undefined variable DeployType。”如果我没有在部署后脚本中定义变量,如下所示“:setvar DeployType“varchar(100)”

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

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

enter image description here

这是我的 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 语句,因为它已被默认。

希望这足够清楚。

最佳答案

我知道这个话题有点老了,但答案如下:

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

关于sql - 在sql部署后构建脚本中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com