Sql 如果表来自同一服务器不同的数据库,为什么会出现“无效对象名”错误?

Sql 如果表来自同一服务器不同的数据库,为什么会出现“无效对象名”错误?,sql,sql-server,Sql,Sql Server,通过下面的查询,我尝试连接两个表: select a1.member_account, substring(substring(a1.member_name, charindex('/', a1.member_name) + 1, len(a1.member_name)), 0, charindex(' ', substring(a1.member_name, charindex('/', a1.member_name) + 1, len(a1.member_name)))

通过下面的查询,我尝试连接两个表:

select  
    a1.member_account,
    substring(substring(a1.member_name, charindex('/', a1.member_name)  + 1, len(a1.member_name)), 0, charindex(' ', substring(a1.member_name, charindex('/', a1.member_name) + 1, len(a1.member_name)))) as firstname, 
    substring(a1.member_name, 0, charindex('/', a1.member_name)) as lastname,
    a2.account, a2.PriorMonthRewardAmount,
    a2.CurrentMonthRewardAmount, a2.RewardDate, a2.RedemptionAmount, 
    a2.RedemptionDate, a1.member_email, 
    a1.member_rest_flag11, a1.member_rest_flag12
from 
    [NFCUDW].[dbo].[member] as a1
left join 
    [IMS].[dbo].[RewardsHistory] as a2 on a2.account = a1.member_account 
order by 
    DATEPART(year, a2.rewarddate) desc,
    DATEPART(month, a2.rewarddate) desc
这两个表位于同一个服务器中,但数据库不同,我正在尝试将它们连接起来

我得到一个错误:

Msg 208,16级,状态1,第1行 无效的对象名称“IMS.dbo.RewardsHistory”

我可以访问这两个表,所以我不明白为什么会出现这个错误

我首先尝试将这两个查询连接起来:

select 
    * 
from 
    RewardsHistory
where 
    priormonthrewardamount > 0
order by 
    DATEPART(year, rewarddate) desc,
    DATEPART(month, rewarddate) desc 

select  
    member_account,
    substring(substring(member_name, charindex('/', member_name) + 1, len(member_name)), 0, charindex(' ', substring(member_name, charindex('/', member_name) + 1, len(member_name)))) as firstname, 
    substring(member_name, 0, charindex('/', member_name)) as lastname,
    member_email, member_rest_flag11, member_rest_flag12
from 
    member

我在这里可能完全错了,只是在黑暗中拍摄,但是在你的查询中声明别名的部分

as lastname,a2.account, a2.PriorMonthRewardAmount,
   a2.CurrentMonthRewardAmount,a2.RewardDate,a2.RedemptionAmount,a2.RedemptionDate,
   a1.member_email,a1.member_rest_flag11,a1.member_rest_flag12

看起来这会引起问题。它看起来确实令人困惑,但alias不应该是单个术语或带引号的字符串吗?您已经包含了一个完整的列表。

也许这个链接会有所帮助:是否从ims.dbo中选择*。[报酬历史]给出结果?@12th是的,它给出了所有表记录您是否使用区分大小写的排序规则对象?如果是,三部分名称的大小写是否正确??您是否尝试过从一个模式或另一个模式调用它?如在选择。。。从member left join[IMS].[dbo].[RewardsHistory]lastname后面有一个,这意味着在他的select子句中有一个新的列,他在子字符串a1中使用别名。member_name,0,charindex'/',a1.member_name作为lastname,因为他应该抱歉,错过了lastname后面的逗号。就像我说的,黑暗中的一枪。