使用启用了RPC的OPENQUERY()删除行的问题,遵守区分大小写

时间:2017-06-09 08:09:38

标签: mysql sql-server linked-server openquery

我正在使用T-SQL,我想使用MYSQL从链接服务器中删除一行。

为此,我尝试过:

delete from openquery(MYSQLServer,
'select * from dTable where date = cast(cast(date_add(now(),interval -6 day)as date) as int) 
and ProductKey = 38410 and StoreKey = 3201')

但这会产生错误

There was a recoverable, provider-specific error, such as an RPC failure.

然后我用Google搜索了这个问题并意识到我需要通过右键单击链接服务器并设置RPC = TrueRPC Out = True来调整管理工作室中的RPC设置。刷新链接的服务器并再次执行查询会产生相同的错误。

通过搜索网络,我也意识到删除区分大小写

然而,使用

exec sp_tables_ex MYSQLServer

告诉我,我在桌子上使用完全相同的情况。我还控制每列都有相同的情况。我试图重写查询只是为了以防万一,只有大写值,但后来我得到了大写的表不存在的错误。

我也尝试过使用

SELECT * FROM MYSQLServer.Catalog.dbo.dTable

但是错误Invalid object name

我也试过了:

select * from openquery(MYSQLServer,
'delete from dTable where date = cast(cast(date_add(now(),interval -6 day)as date) as int) 
and ProductKey = 38410 and StoreKey = 3201')

但这给出了either object has no columns, or the current user does not have permissions on that object的错误。

有没有人有任何线索?

  

修改

我发现另一个链接服务器,我之前已成功删除了一行,其管理工作室的特定链接服务器上的Security设置下定义了一个远程用户ID和密码的用户名。

我试图通过使用:

来模仿这个
EXEC sp_addlinkedsrvlogin 'MYSQL_UNIC', 'false', 'uid', 'rmtid', 'rmtpw'

但这给了我错误

Access denied for user rmtid (using password: YES)

当我尝试使用删除查询时。

我将尝试找到如何使用远程用户获取Query权限。

1 个答案:

答案 0 :(得分:0)

这是解决方案:

  1. 确保在LinkedServer的属性上将RPC和RPC Out设置为TRUE。

  2. 然后使用以下语法(专门用于Teradata):

声明@SQL varchar(1000) SET @SQL =“从DB.tableName全部删除” 在TERADATA_LINKEDSERVER处执行(@SQL)