VS 2010 数据库项目 - SQL03006 错误

6
我在VS 2010中创建了一个新的SQL Server数据库项目,从名为“managers”的本地数据库导入了数据库对象和设置,在尝试构建项目时收到以下错误信息:
SQL03006:视图:[dbo] . [vw_mlFunds] 对象[managers] . [dbo] . [mlfunds]存在未解决的引用。
我不知道为什么这个视图要完全限定一个表引用以包括实际的数据库名称,而且我不想改变SQL,因为它是别人的代码,技术上并没有错误。但我认为将表名完全限定为包括数据库名称可能会让VS编译器感到困惑,因为它期望的是[dbo] . [mlfunds],而不是[managers] . [dbo] . [mlfunds]。如何解决这个问题?我可以在某个地方设置一个新的数据库名称变量/别名吗?还是我必须重构/修改SQL才能使其编译?谢谢。
3个回答

5

如果您连接了此项并且仍然无法弄清楚为什么您的比较脚本仍然失败,请确保在初始的“选择源/目标模式”屏幕中设置“SQLCMD变量”选项。 - chprpipr

2

在创建项目并导入数据库后,我遇到了相同的错误。对我来说问题出在FROM表引用中包含了完全限定名,但所选字段没有;具体如下

SELEC l.UserID, l.Email, m.DOB, ...
FROM ***[DBName].dbo***.Layout as l
LEFT OUTER JOIN masterUs as m

我通过删除DBName和DBO部分修改了完全合格的引用,所有错误都已解决。

SELECT l.UserID, l.Email, m.DOB, ....
FROM Layout as l
LEFT OUTER JOIN masterUs as m

1
你需要为 [managers] 数据库创建另一个数据库项目,并让你的项目“引用”另一个项目。你可以通过在 [managers] 数据库上执行简单的反向工程步骤来将该数据库中的所有对象导入到新的 VSDB 项目中。请参见 在数据库项目中使用引用

你能为我澄清一下吗?当基础表和视图都在同一个[managers]数据库中时,为什么需要引用呢,这让我感到困惑。 - Joe Stefanelli
1
我原以为[managed]是一个不同的数据库。如果视图明确地将表名与数据库名相匹配,那么视图定义在技术上是不正确的,因为该项目可以在不同的DB名称下部署,甚至在部署后,它可以被还原/复制/附加/快照到各种名称下,而视图在所有这些情况下都将无效。 - Remus Rusanu
我认为在原始开发人员的意图中,完全限定表名与数据库名称是无意的,我们可能会修改视图脚本以删除数据库名称引用,但视图的创建脚本将在ssms中无错误地运行,并且当针对管理器数据库运行时,它将识别对管理器的显式引用作为自身。我同意这是懒散的代码,但暂时不想去碰它,因为这需要测试。这就是为什么我试图找出是否有某种方法可以解决这个问题。 - Mary Hamlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接