我有一个插入语句基本上是这样的:
insert into openquery(Test_LinkedServer,
'select a,b,c from my_ora_table')
select a, b, c
from my_dbo_table;
当我执行它时,它会运行并且控制台返回“xx rows受影响”消息。
当我尝试第二次执行它时,不做任何更改,我收到“OLE DB 提供程序”错误:
提供的元数据不一致。在执行期间提供了一个在编译时未找到的额外列
如果我在
OPENQUERY
中的SQL语句中添加额外的空格:
insert into openquery(Test_LinkedServer,
'select a,b(extra_space),c from my_ora_table')
再次有效1次。
它是否有某种安全措施来阻止多次执行相同的解析 SQL?
源数据库:SQL Server
SQL 客户端:Microsoft SQL Server Management Studio
目标数据库:Oracle
我的链接服务器提供商:
我的链接服务器属性:
不完全是一个答案,但这是我超级讨厌的解决方法,至少目前是这样:
当您的查询被解析以供执行时,就会出现此问题。如果是第一次,就成功了。如果您要立即重新执行它,则会失败。
所以我添加了一个虚拟注释行,并将其替换为运行时的一些随机数。它弄乱了第一个元数据,因为字符串被更改了。
declare @i nvarchar(max);
declare @s nvarchar(max);
set @i = '
insert into openquery(Test_LinkedServer,
''select a,b,c /*pseudo_placeholder*/ from my_ora_table'')';
set @s = '
select a, b, c
from my_dbo_table';
begin
set @i = replace(@i, 'pseudo_placeholder', floor(1+(500-1+1)*rand()));
end
exec (@i+@s);
现在可以连续执行了。