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

问题描述 投票:0回答:1

我正在使用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的权限。

mysql sql-server linked-server openquery
1个回答
0
投票

这是解决方案:

  1. 确保在LinkedServer的属性上将RPC和RPC Out设置为TRUE。
  2. 然后使用以下语法(这是专门针对Teradata):

声明@SQL varchar(1000)SET @SQL ='DELETE FROM DB.tableName ALL'EXEC(@SQL)AT TERADATA_LINKEDSERVER

© www.soinside.com 2019 - 2024. All rights reserved.