我正在使用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 = True
和RPC 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的权限。
这是解决方案:
声明@SQL varchar(1000)SET @SQL ='DELETE FROM DB.tableName ALL'EXEC(@SQL)AT TERADATA_LINKEDSERVER