SQL Server 链接服务器:四个前缀可用于select,但不能用于alter

7rtdyuoh  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个SQL Server 13.0计算机,其中[EC2AMAZ\SQLEXPRESS]作为链接服务器
我在SQL Server 13.0系统上运行以下命令,这个select语句运行得很好:

select * from [EC2AMAZ\SQLEXPRESS].[import].[dbo].[table]

但这个

ALTER TABLE [EC2AMAZ\SQLEXPRESS].[import].[dbo].[table] ADD field
nvarchar(4000)

抛出错误:
对象名称“EC2AMAZ\SQLEXPRES.import.dbo.table”包含的前缀数超过了最大值。最大值为2。Msg 102,级别15,状态1,第3行“field”附近的语法不正确。
为什么可以使用四个前缀来选择而不是改变?

ajsxfq5m

ajsxfq5m1#

不能对链接服务器运行DDL。一种解决方法是使用动态SQL:

EXEC [EC2AMAZ\SQLEXPRESS].[import].sys.sp_executesql 
  N'ALTER TABLE [dbo].[table] ADD field nvarchar(4000);';

official documentation中的语法图 * 不 * 包括ALTER TABLE的四部分名称:

FROM {<table_source>}的文档中正式记录了SELECT的这一点(尽管是间接记录):
如果表或视图存在于SQL Serverl示例之外,请使用由四部分组成的名称,格式为 linked_server.catalog.schema.object
(Typo是免费的!)
ALTER TABLE不存在这样的引用。是的,我们不得不从 * 缺乏 * 文档中推断出某些事情是不可能的,这有点糟糕,但是想象一下,即使试图记录一个特性 * 不能做 * 的所有事情?

这辆车

  • 不能用作漂浮装置
  • 不是维生素C充足来源
  • 不能投票
  • 可能不会回应“贝特西”
  • 不会飞
  • 不适合穿喇叭裤
  • 我不能吃胡萝卜汁,健怡百事可乐,或者速避灵
    ...
    可能有一长串的“为什么”,包括进行模式修改所需的锁的类型,但我怀疑“为什么”在这里并不是重要的,因为回答这个问题并不能改变问题,也不能帮助您避免使用变通方法。

相关问题