尝试运行跨服务器更新:
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
不会出错。
答案 0 :(得分:1)
是的,就是这样。您不能有超过三个前缀,因此当您超过3时(主要是在加入其他服务器时),您必须使用别名。自从Sql Server 7以来就一直这样(也许在我不记得6.5之前)。
如果您想在使用别名时使代码更具可读性,请指定一个更有意义的别名,这样可以更容易理解。
示例:
SELECT
production_accounting_clients.[ClientName]
FROM Production.Accounting.dbo.Clients production_accounting_clients