根用户拒绝通过 SQL Server LinkedServer 在 MySQL 中的特定列上插入

问题描述

我正在尝试将来自 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 开始可用。

你知道的越多...