sql视图中的对象名称无效
由于某些部署限制,我无法在项目中使用synomyms,因此我创建了以下视图:sql视图中的对象名称无效,sql,sql-server,sql-server-2008,sql-view,Sql,Sql Server,Sql Server 2008,Sql View,由于某些部署限制,我无法在项目中使用synomyms,因此我创建了以下视图: CREATE VIEW [dbo].[User] AS SELECT * FROM [PersonalData].[dbo].[User] GO 它工作正常,但现在我需要修改如下: ALTER VIEW [dbo].[User] AS SELECT [Id], t.[Name] AS [Title], [FirstName], [LastName], [JobTitle],
CREATE VIEW [dbo].[User] AS SELECT * FROM [PersonalData].[dbo].[User]
GO
它工作正常,但现在我需要修改如下:
ALTER VIEW [dbo].[User] AS
SELECT [Id],
t.[Name] AS [Title],
[FirstName],
[LastName],
[JobTitle],
[Department],
[EmailAddress],
[PhoneNumber],
[PhoneExtension],
[MobilePhoneNumber],
[CreatedDate],
[ModifiedDate],
[Uid],
[Active]
FROM [PersonalData].[dbo].[User] AS u
LEFT OUTER JOIN [PersonalData].[dbo].[Titles] AS t ON u.TitleId = t.Id
GO
目前,它在以下方面失败:
Ambiguous column name 'Id'
在左侧外部联接中
行
但是,Microsoft SQL Management Studio会突出显示[PersonalData].[dbo].[Titles]
,并显示以下错误:
Invalid object name '[PersonalData].[dbo].[Titles]
事实上,它没有为该表的列提供IntelliSense
表[PersonalData].[dbo].[Titles]
就在那里。事实上,以下查询返回的结果没有错误:
select * from [PersonalData].[dbo].[Titles]
我对SQL的了解不够深入,但我不明白为什么会这样,为什么它会找到用户
表,但却找不到标题
更详细一点:
- 我创建的视图不在
数据库中,而是在另一个名为PersonalData
平台的数据库中
- 我检查了上下文,一切正常,我正在
数据库中创建视图Platform
ALTER VIEW [dbo].[User] AS
SELECT u.[Id],
似乎用户表和标题表都有一个名为“Id”的列。它告诉您,它不知道您在选择列列表中指的是哪个Id列。您需要将表名添加到
[Id]
字段中。因为该字段在两个表中,所以它被认为是不明确的(视图不知道从哪个表获取它)
IntelliSense问题是外围问题,可能是因为:
Id
,因为它存在于两个表中),或者Edit>IntelliSense>Refresh Local Cache
(以及根据与服务器的网络连接,等待几秒钟甚至几分钟)来修复此问题Id
。这个名字毫无意义。它是一个用户ID
?好的,无论它出现在模式中的什么地方,都可以称它为UserID
您不能使用
选择u.[Id]作为[Id]
?创建视图似乎只是在查找标题
表fine@MattBusche如果你能补充一点细节,我想你应该把它作为这个问题的答案。@MattBusche:这就是答案(我感到羞耻)。请回答,我会接受的。Thanks@MattBusche-在我发布我的答案之前,我没有看到你的评论。请作为答案发布,这样您就可以获得信用。@lontivero谢谢,我在下面发布了answe
SELECT u.[Id] AS [id]