问题描述
我正在尝试将来自 sql Server 的记录插入到作为链接服务器连接的 MysqL 实例中。
这基本上是我在做什么:
INSERT INTO OPENQUERY(LINKED_SERVER,'SELECT
id,claimed
FROM MysqLTable;'
)
SELECT
Id,'0'--claimed
FROM
MSsqlTable
我收到此错误:
链接服务器“LINKED_SERVER”的 OLE DB 提供程序“MSDAsql”无法插入表“[MSDAsql]”,因为列“已声明”。用户无权写入该列。
链接服务器当前配置为使用 MysqL 数据库上的 root 用户,我已经使用 GRANT 检查了权限,它们看起来很好:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '******' WITH GRANT OPTION
'claimed' 列是定义为“enum('1','0')”的枚举列。我有一种感觉是枚举方面把事情搞砸了,但我不知道为什么。
我使用类似的过程在其他地方插入数据,所以我知道它原则上应该可以工作,但我就是不明白为什么这个列会如此痛苦!
解决方法
这似乎是旧版本 MySQL 链接服务器的一个已知问题,并且 OPENQUERY 不是该工作的正确工具。相反,我重写了查询以使用 EXEC (INSERT...) AT [LINKED_SERVER],它的作用就像一个魅力。
此语法从 SQL Server 2005 开始可用。
你知道的越多...