【问题标题】:SQL Server Error: "maximum number of prefixes. The maximum is 3" with subselect syntaxSQL Server 错误:“最大前缀数。最大值为 3”,带有子选择语法
【发布时间】:2011-01-25 03:49:33
【问题描述】:

尝试运行跨服务器更新:

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

不报错。

另见

【问题讨论】:

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


    【解决方案1】:

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

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

    例子:

    SELECT 
    
    production_accounting_clients.[ClientName]
    
    FROM Production.Accounting.dbo.Clients production_accounting_clients
    

    【讨论】:

    • 我的选择没有四部分前缀的问题,更新有。 update 不允许使用别名。所以我仍然很想看到一个有效的语法。
    • 您可以在更新中使用别名。从 tableName tn 更新 tn set tn.x=y
    猜你喜欢
    • 2011-11-01
    • 2013-05-26
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多