我正在使用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权限。
答案 0 :(得分:0)
这是解决方案:
确保在LinkedServer的属性上将RPC和RPC Out设置为TRUE。
然后使用以下语法(专门用于Teradata):
声明@SQL varchar(1000) SET @SQL =“从DB.tableName全部删除” 在TERADATA_LINKEDSERVER处执行(@SQL)