SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有啥区别?

Posted

技术标签:

【中文标题】SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有啥区别?【英文标题】:What's the difference between Local and Default SQLCMD variables in SQL Server Database Project properties?SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有什么区别? 【发布时间】:2018-07-27 09:51:02 【问题描述】:

我有一个 SQL Server 数据库项目 (VS2017),在项目属性中,SQLCMD 变量选项卡如下所示:

问题:我可以创建一个 SQLCMD 变量并为其设置一个默认值一个本地值。 有什么区别?

注意:我目前在我的项目中使用 SQLCMD 变量,所以我想我知道它们是如何工作的,但我无法理解这种区别。根据documentation我能找到的(高亮是我的):

在 SQL Server 数据库项目中,您可以利用 SQLCMD 变量来 提供用于调试或发布的动态替换。 您输入变量名称和值,在构建期间,值 将被替换。 如果没有本地值,则默认值 将被使用。通过在项目属性中输入这些变量,它们 将在出版时自动提供并存储在 发布配置文件。您可以拉入项目的价值 变量通过“加载值”按钮发布。

看来:

如果您只有一个默认值,则会使用该值 如果您只有一个本地值,将使用该值 如果两者都有,则将始终使用 Local 值。

这对我有什么帮助?设置两个值似乎没有意义,那么为什么我们需要两个不同的值呢?

【问题讨论】:

【参考方案1】:

发布时本地优先于默认值。

这意味着如果您同时填写了默认值和本地值,然后单击发布,您在发布窗口中的变量值将自动填充为本地值,即使您没有点击加载值按钮。

如果您只有默认值,则“发布”窗口中不会自动填充任何值,直到您单击“加载值”按钮。 然后将使用默认值填充值。

您始终可以覆盖“发布”窗口中的变量值,即使是填写为本地的变量值。

因此,本地值的目的是在发布时准备填充的最终值。 将它们留空要求您单击“加载值”以获取默认值,或手动填充变量值。

【讨论】:

"这意味着如果您同时填写了默认值和本地值,然后单击发布,您在发布窗口中的变量值将自动填充为本地值,即使您没有点击加载值按钮。” 不幸的是,这不是我的经验。当我单击发布时,没有加载任何值,并且发布按钮显示为灰色。我必须单击加载值才能发布。无论我有默认值、本地值还是两者都有,都是如此。【参考方案2】:

那么为什么我们需要两个不同的值呢?

您在默认列中提供的值将存储在 项目文件 (.sqlproj),因此应该是源代码控制的。

Local 值存储在不受版本控制的 .user 文件中 (.sqlproj.user)。

虽然在本地构建时 Local 值将覆盖默认值,但如果您使用构建服务器 - 必须设置默认值,因为构建服务器不会使用 .user 文件,它将使用默认值价值。

【讨论】:

以上是关于SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2000端口开放 使外网能访问

sql server 2008怎么修改视图中的字段属性!!例如修改字段名和字段类型!

SQL Server 复制本地订阅属性返回“无法将值‘null’应用于属性 ServerInstance:值不能为空。”

如何远程把sql server中的数据导入到本地sql server中?

将 MVC 项目从本地迁移到 Azure - SQL Server 问题

实体框架和 SQL Server 表属性