【发布时间】:2019-08-29 13:49:26
【问题描述】:
基于this 问题,我创建了一个函数并将其添加到我的数据库中。现在我想将该函数用作计算列:
-- Based on https://stackoverflow.com/a/1012802/10406502 (work by Even Mien)
CREATE FUNCTION [dbo].[StripCharacters]
(
@String NVARCHAR(MAX),
@MatchExpression VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SET @MatchExpression = '%['+@MatchExpression+']%'
WHILE PatIndex(@MatchExpression, @String) > 0
SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1, '')
RETURN @String
END
GO
-- Table
CREATE TABLE [dbo].[Trailer]
(
[ID] INT NOT NULL PRIMARY KEY IDENTITY,
[ID_Hauler] INT NULL,
[RegistrationNumber] NCHAR(9) NOT NULL,
[RegistrationNumberSimplified] AS [dbo].StripCharacters([RegistrationNumber], '^A-Z0-9'),
[MaxLoad] FLOAT NULL,
CONSTRAINT [FK_Hauler_Trailer] FOREIGN KEY ([ID_Hauler]) REFERENCES [Hauler]([ID]),
CONSTRAINT [UC_RegistrationNumber] UNIQUE ([RegistrationNumberSimplified])
)
但是,我引用该函数的行会引发错误:
“Berechnete Spalte:[dbo].[Trailer].[RegistrationNumberSimplified]” enthält einen nicht aufgelösten Verweis auf ein Objekt。纠缠不清 das Objekt nicht vorhanden, oder der Verweis ist mehrdeutig, da er auf die folgenden Objekte verweisen könnte: [dbo].[StripCharacters] oder [dbo].[Trailer].[dbo]::[StripCharacters].
“要么对象不存在,要么引用不明确,因为它可能表示 [dbo].[StripCharacter] 或 [dbo].[Trailer].[dbo]::[StripCharacter]。”
我也尝试让服务器猜测函数的命名空间。在这种情况下,数据库会抛出错误:
(57,1):SQL72014:.Net SqlClient 数据提供者:Meldung 195、Ebene 15、 状态 10,Zeile 11 'StripCharacters' 不是公认的内置 函数名。
这里有什么问题?
我也找到了this的问题,但答案对我没有帮助,因为我不使用数据库引用。
【问题讨论】:
-
StripCharacters 存在于两个不同的 schamas 中,第一个在 dbo 下,第二个在 [dbo].[Trailer].[dbo]
-
@AmiraBedhiafi 但是为什么呢?错误发生在 Visual Studio 数据库项目中,并且我定义该函数的唯一位置是在 SQL 文件中,其代码与 Amy 在链接问题中的帖子中的代码完全相同。
-
尝试删除 [dbo].StripCharacters 并运行查询以了解有关问题的更多信息
-
你确定吗?如果您的名称错误,您会得到您描述的错误:db<>fiddle
标签: sql-server tsql calculated-columns visual-studio-2019 database-project