tsql - SSDT 项目中带美元符号的完全限定名称

标签 tsql visual-studio-2012 sql-server-data-tools

我在做一个 tsql 项目,我注意到现有代码使用了一种我以前从未见过的语法。他们在数据库名称前放置了一个美元符号以表示完全合格的地址。

这是一个例子:

SELECT  c.AccountCode, FROM **[$(SmartAdmin)]**.dbo.Customers c

enter image description here

如果我将数据库名称重命名为 SmartAdmin.dbo.Customers,Visual Studio 会抛出错误“包含对对象的未解析引用”。

这似乎是与 Visual Studio 相关的东西,任何人都可以解释这是什么以及 我是否可以删除它。

请看附件截图,最后一张来自项目解决方案文件。

enter image description here

enter image description here

最佳答案

[$(SmartAdmin)] 语法在 SSDT 项目中用于引用其他数据库中的对象。准确的说是SQLCMD语法。

如果您有一个对 SmartAdmin 的数据库引用,并且如果设置引用以便 [$(SmartAdmin)] 正确引用它,那么这不是问题。看起来问题出在另外两个[SmartAdmin] 的引用。将它们更改为看起来像 [$(SmartAdmin)].dbo.whatever


为什么这些引用有用的示例:我刚刚编辑了我在 SSDT 中的一个存储过程,拼错了一个列名。几秒钟之内,列名就带有红色下划线。然后我删除了列名所依赖的数据库引用。红色下划线消失了。我重新添加了数据库引用,该列再次带有红色下划线。我更正了列名称,红色下划线消失了。

如果没有数据库引用,我将不得不等到存储过程被部署或可能被执行时,才能看到错误。通过数据库引用,我在编辑器中发现了问题。就像代码一样。

关于tsql - SSDT 项目中带美元符号的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348525/

相关文章:

c++ - 引用多级指针的更好方法?

sql - 获取更新行

database - 在日期时间字段上仅存储日期的最佳方式?

sql-server - 针对 IN () 子句 COLLATE DATABASE_DEFAULT

sql - SQL Server 中 INSERT 语句中指定的列的表别名被忽略

c++ - InstallShield 在安装时不安装可再发行的 VC++

visual-studio - ReSharper 颜色标识符与 Visual Studio 2012 深色主题搞砸了

sql-server - SSDT 如何在不丢失自定义客户端数据库对象的情况下使用 : Deploy . dacpac?

sql-server - SSDT 和 TFS : compare SQL Server database not working

sql-server - SSDT 禁用重命名 - 重构日志