带有 UDF 和视图的 SSDT 项目中的数据库参考
Database Reference in SSDT project with UDFs and Views
运行 变成了一个奇怪的问题。假设在一个空的解决方案中有两个数据库项目,Bart 和 Homer。 Bart 已添加为 Homer 的数据库参考。
Bart项目定义了一个函数:
CREATE FUNCTION [dbo].[Message]()
RETURNS NVARCHAR(255)
AS
BEGIN
RETURN 'I am a value returned from another database'
END
然后Homer项目定义了一个table:
CREATE TABLE [dbo].[Messages]
(
[Id] INT NOT NULL PRIMARY KEY
)
和一个视图:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, Bart.dbo.Message() AS [Message]
FROM dbo.Messages
尝试构建时,出现以下错误:
Error 2 SQL71501: Computed Column: [dbo].[MessagesV].[Message]
contains an unresolved reference to an object. Either the object does
not exist or the reference is ambiguous because it could refer to any
of the following objects: [Bart].[dbo].[Message] or
[dbo].[Messages].[Bart]::[dbo].[Message].
Error 1 SQL71501: View: [dbo].[MessagesV] contains an unresolved
reference to an object. Either the object does not exist or the reference
is ambiguous because it could refer to any of the following objects:
[Bart].[dbo].[Message] or [dbo].[Messages].[Bart]::[dbo].[Message].
我应该如何在视图中正确引用 Bart UDF?
当您添加数据库引用时,默认情况下它会设置一个数据库变量以在您的 TSQL 脚本中使用。这允许您的项目针对多个环境,其中引用的数据库可能具有不同的名称。
给定此默认值的正确用法是:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, [$(Bart)].dbo.Message() AS [Message]
FROM dbo.Messages
我已经验证这适用于您发送的代码片段。请注意,如果您确实想直接使用数据库名称,则只需在添加引用时删除数据库变量值即可。然后 Bart.dbo.Message() 将按预期工作。
下面显示的是“添加数据库引用”对话框,其中显示了相关的数据库变量和示例用法。您将看到用法根据数据库变量文本框中是否有任何文本而变化。
运行 变成了一个奇怪的问题。假设在一个空的解决方案中有两个数据库项目,Bart 和 Homer。 Bart 已添加为 Homer 的数据库参考。
Bart项目定义了一个函数:
CREATE FUNCTION [dbo].[Message]()
RETURNS NVARCHAR(255)
AS
BEGIN
RETURN 'I am a value returned from another database'
END
然后Homer项目定义了一个table:
CREATE TABLE [dbo].[Messages]
(
[Id] INT NOT NULL PRIMARY KEY
)
和一个视图:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, Bart.dbo.Message() AS [Message]
FROM dbo.Messages
尝试构建时,出现以下错误:
Error 2 SQL71501: Computed Column: [dbo].[MessagesV].[Message]
contains an unresolved reference to an object. Either the object does
not exist or the reference is ambiguous because it could refer to any
of the following objects: [Bart].[dbo].[Message] or
[dbo].[Messages].[Bart]::[dbo].[Message].
Error 1 SQL71501: View: [dbo].[MessagesV] contains an unresolved
reference to an object. Either the object does not exist or the reference
is ambiguous because it could refer to any of the following objects:
[Bart].[dbo].[Message] or [dbo].[Messages].[Bart]::[dbo].[Message].
我应该如何在视图中正确引用 Bart UDF?
当您添加数据库引用时,默认情况下它会设置一个数据库变量以在您的 TSQL 脚本中使用。这允许您的项目针对多个环境,其中引用的数据库可能具有不同的名称。
给定此默认值的正确用法是:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, [$(Bart)].dbo.Message() AS [Message]
FROM dbo.Messages
我已经验证这适用于您发送的代码片段。请注意,如果您确实想直接使用数据库名称,则只需在添加引用时删除数据库变量值即可。然后 Bart.dbo.Message() 将按预期工作。
下面显示的是“添加数据库引用”对话框,其中显示了相关的数据库变量和示例用法。您将看到用法根据数据库变量文本框中是否有任何文本而变化。