我正在处理一个tsql项目,并且我已经注意到现有代码使用的语法是我以前从未见过的。他们在数据库名称前面加了一个美元符号,以获取完全限定的地址。

这是一个例子:

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

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

这似乎是与Visual Studio相关的事情,任何人都可以解释一下这是什么,
是否可以删除它。

请查看所附的屏幕截图,最后一个来自项目解决方案文件。

最佳答案

在SSDT项目中,使用[$(SmartAdmin)]语法来引用其他数据库中的对象。确切地说,它是SQLCMD语法。

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

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

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

10-08 06:30