我有一个非常大的数据库(几百个表),我在VS 2017中使用了一个数据库项目。考虑一个简单的UDF
create function [MySchema].fn_Name --MySchema is located in MyDbName
(
@num int
)
returns table
as return
select @num
inner join [MyDbName].dbo.MyTable mt
on mt.num = @num
我有一个MyDbName数据库项目和几个与此特定项目相关的表,但这些表不包含MyTable。如果我想使用完全限定名称,如何防止MyTable的模糊引用错误(SQL71561)?我是否必须明确地将My procs和函数引用的所有表添加到我的数据库项目中?
答案 0 :(得分:0)
很难完全理解你的问题,但可能有几种情况:
如果你有一个数据库项目(MyDbName
),并且那里存在表和UDF,那么你不应该使用完全限定名,因为你引用它本身就没有意义了。可能存在这样的情况:您有多个相同结构数据库的实例,另一个作为主服务器作为从服务器,但据我所知,情况并非如此,因此只需在语句中不使用数据库名称。
如果dbo.MyTable存在于与UDF不同的数据库项目中,则需要添加数据库引用并使用变量来定义数据库。 Read more。通过引用其他数据库项目的.dacpac
来添加数据库引用。然后您的查询将如下所示:
inner join [$(MyDbName)].dbo.MyTable mt
要回答您的问题:不,您不必自己添加表格,但您需要添加对包含这些表格的项目的引用。