【发布时间】:2014-08-01 02:14:19
【问题描述】:
所以这很“有趣”,而“有趣”是指令人费解的。我设法:
-
向 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'
但我因此无法将这些结果插入到表格中。我认为,如果我可以将存储过程作为表返回,但我找到的解决方案将查询转换为字符串并将这些结果放入表中只会导致错误。
我尝试的另一件事是将“插入”部分与字符串一起放入,但这会引发有关“标签已被使用”的错误,或者 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'
...以及诸如此类的各种可笑的东西。
谁能告诉我如何将第一个查询的结果应用到“插入到 DELTAS.TABLE .....”语句中?
我知道我很接近了,但我现在已经在圈子里徘徊了一段时间,我觉得我踩到了我的尾巴。
谢谢!
【问题讨论】:
-
INSERT INTO...应该适合你,如果你能得到正确的语法。打印出@MyString 语句,将它和错误添加到您的帖子中。 -
Insert Into [HO-RS1].[DELTAS].[dbo]将不起作用,因为该表在 SQL Server 上,并且在 Oracle 服务器上执行。
标签: sql stored-procedures linked-server openquery delta