所以这很“有趣”,而“有趣”则意味着心灵弯曲。我设法:
将参数输入OPENQUERY并得到如下结果:
Declare @MyString varchar(max)
, @TheDateAfter datetime
set @TheDateAfter = DATEADD(d, 1, @TheDate)
set @MyString = 'Select * from "ORACLEDB"."' + @TheTable + '"
WHERE "EDITTIME" > to_date(''' + convert(varchar(30),@TheDate,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')
AND "EDITTIME" < to_date(''' + convert(varchar(30),@TheDateAfter,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')'
set @MyString = N'select * from openquery (LINKEDSERVER
, ''' + REPLACE(@MyString, '''', '''''') + '''
)'
Exec(@MyString)
以多种方式返回结果,包括采用我的参数的存储过程:
sp_get_Deltas @TheDate = '1/2/03', @TheTable = 'Table'
但我无法将这些结果插入表格中。我认为如果我可以将sproc返回作为表,但我找到的解决方案将查询转换为字符串并将这些结果放入表中只会导致错误。
我尝试的另一件事是将“Insert Into”部分放入字符串中,但是会引发有关“已经使用的标签”的错误,或者Oracle提供程序无权写入我的SQL表。这是我的尝试。
Declare @MyString varchar(max)
, @TheDateAfter datetime
set @TheDateAfter = DATEADD(d, 1, @TheDate)
set @MyString = 'Insert Into [HO-RS1].[DELTAS].[dbo].[' + @TheTable + ']
Select * from "ORACLEDB"."' + @TheTable + '"
WHERE "EDITTIME" > to_date(''' + convert(varchar(30),@TheDate,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')
AND "EDITTIME" < to_date(''' + convert(varchar(30),@TheDateAfter,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')'
set @MyString = N'select * from openquery (LINKEDSERVER
, ''' + REPLACE(@MyString, '''', '''''') + '''
)'
Exec(@MyString)
我尝试了其他一些我认为不会起作用的事情,只是为了排除它们:
Insert Into DELTAS.TABLE
Select * From sp_get_Deltas @TheDate = '1/2/03', 'TheTable'
......以及各种荒唐的东西。
有人可以告诉我如何将第一个查询的结果应用到“Insert Into DELTAS.TABLE .....”语句中吗?
我知道我很亲近,但我现在已经在圈子里徘徊了一会儿,我觉得我踩到了我的尾巴。
谢谢!
答案 0 :(得分:0)
你快到了。这适用于普通的存储过程。让我们看看它是否适用于使用mindbending OPENQUERY
Insert Into DELTAS.TABLE
EXEC sp_get_Deltas @TheDate = '1/2/03', 'TheTable'
当然,EXEC的列列表必须与目标表匹配。
如果您收到错误,请发布。