Ошибка SQL Server: «максимальное количество префиксов. Максимальное значение 3» с синтаксисом подвыбора - PullRequest
2 голосов
/ 08 марта 2010

Попытка запустить межсерверное обновление:

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 Ответ

1 голос
/ 08 марта 2010

Да, так оно и есть. Вы не можете иметь более трех префиксов, поэтому вы должны использовать псевдонимы, когда вы превышаете 3 (в основном, при присоединении к другим серверам). Так было со времен Sql Server 7 (и, может быть, раньше я не могу вспомнить о 6.5).

Если вы хотите сделать свой код более читабельным при использовании псевдонимов, укажите более значимый псевдоним, который сделает его более легким для отслеживания.

Пример:

SELECT 

production_accounting_clients.[ClientName]

FROM Production.Accounting.dbo.Clients production_accounting_clients
...