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 つ以上のプレフィックスを持つことはできないため、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 に答える