SQL Server Error: "maximum number of prefixes. The maximum is 3" with subselect syntax

18,794

Yes, that is just the way it is. You can't have more than three prefixes, so you have to use an aliases when you go over 3 (mainly when joining to other servers). It's been that way since Sql Server 7 (and maybe before I can't remember on 6.5).

If you want to make your code more readable when using aliases, specify a more meaningful alias which will make it a lot easier to follow.

Example:

SELECT 

production_accounting_clients.[ClientName]

FROM Production.Accounting.dbo.Clients production_accounting_clients
Share:
18,794
mistertodd
Author by

mistertodd

Any code is public domain. No attribution required. జ్ఞా <sup>🕗</sup>🕗 Yes, i do write i with a lowercase i. The Meta Stackexchange answer that I am most proud of

Updated on June 04, 2022

Comments

  • mistertodd
    mistertodd almost 2 years

    Trying to run a cross-server update:

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

    Gives the error:

    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.
    

    What gives?


    Note: Rearranging the query into a less readable join form:

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

    does not give an error.

    See also

  • mistertodd
    mistertodd about 14 years
    My select doesn't have a problem with a four-part prefix, the update does. And the update doesn't allow an alias. So i'm still curious to see a working syntax.
  • Jens Frandsen
    Jens Frandsen almost 12 years
    You can use alias with updates. Update tn set tn.x=y from tableName tn