2

尝试运行跨服务器更新:

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

不给出错误。

也可以看看

4

1 回答 1

1

是的,就是这样。前缀不能超过三个,所以超过 3 个时必须使用别名(主要是加入其他服务器时)。从 Sql Server 7 开始就是这样(也许在我不记得 6.5 之前)。

如果您想在使用别名时使您的代码更具可读性,请指定一个更有意义的别名,这将使其更容易遵循。

例子:

SELECT 

production_accounting_clients.[ClientName]

FROM Production.Accounting.dbo.Clients production_accounting_clients
于 2010-03-08T20:31:15.377 回答