SQL Server错误:“最大前缀数。最大值为3”,带有子选择语法

时间:2010-03-08 20:28:20

标签: sql-server sql-server-2000 linked-server

尝试运行跨服务器更新:

UPDATE asilive.Contoso.dbo.lsipos
SET PostHistorySequencenNmber = (
    SELECT TransactionNumber 
    FROM Transactions 
    WHERE Transactions.TransactionDate = 
         asilive.CMSFintrac.dbo.lsipos.TransactionDate)

给出错误:

Server: Msg 117, Level 15, State 2, Line 5
The number name 'asilive.Contoso.dbo.lsipos' contains more than 
the maximum number of prefixes. The maximum is 3.

是什么给出了?


注意:将查询重新排列为不太可读的加入表单:

UPDATE asilive.Contoso.dbo.lsipos
SET PostHistorySequenceNumber = B.TransactionNumber
FROM cmslive.Contoso.dbo.lsipos A
    INNER JOIN Transactions B
    ON A.TransactionDate = B.TransactionDate

不会出错。

另见

1 个答案:

答案 0 :(得分:1)

是的,就是这样。您不能有超过三个前缀,因此当您超过3时(主要是在加入其他服务器时),您必须使用别名。自从Sql Server 7以来就一直这样(也许在我不记得6.5之前)。

如果您想在使用别名时使代码更具可读性,请指定一个更有意义的别名,这样可以更容易理解。

示例:

SELECT 

production_accounting_clients.[ClientName]

FROM Production.Accounting.dbo.Clients production_accounting_clients