Sql 将参数化OPENQEURY的结果插入本地表的存储过程

Sql 将参数化OPENQEURY的结果插入本地表的存储过程,sql,stored-procedures,linked-server,openquery,delta,Sql,Stored Procedures,Linked Server,Openquery,Delta,这就是“乐趣”,我所说的“乐趣”是指头脑弯曲。我已设法: 将参数馈送到OPENQUERY并获得如下结果: Declare @MyString varchar(max) , @TheDateAfter datetime set @TheDateAfter = DATEADD(d, 1, @TheDate) set @MyString = 'Select * from "ORACLEDB"."' + @TheTable + '"

这就是“乐趣”,我所说的“乐趣”是指头脑弯曲。我已设法:

  • 将参数馈送到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)
    
但我因此无法将这些结果插入表格。我认为如果可以将存储过程作为表返回,那么我找到的解决方案会将查询转换为字符串,并将这些结果放入表中,结果只会导致错误

我尝试的另一件事是将“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…”语句中吗

我知道我已经很接近了,但我已经在圈子里徘徊了一段时间了,我觉得我好像踩到了我的尾巴


谢谢

你就快到了。这适用于正常的存储过程。让我们看看它是否适用于使用MindBinding的SP
OPENQUERY

Insert Into DELTAS.TABLE
EXEC sp_get_Deltas @TheDate = '1/2/03', 'TheTable'
当然,EXEC中的列列表必须与目标表匹配


如果您有错误,请发布。

如果语法正确,插入到…中的
应该适合您。打印出@MyString语句,将该语句和错误添加到您的帖子中。
插入[HO-RS1]。[Delta]。[dbo]
将不起作用,因为该表在SQL Server上,而这是在Oracle Server上执行的。行得通!现在你提供了解决方案,我明白为什么它是有意义的。谢谢我相信它出错的原因是“嵌套”(?)隐藏了一个“Select*Select*”,这显然会导致问题。嗯<代码>从StoredProcess中选择*在任何情况下都无效。但是,如果它是表值函数,则它是有效的。
    Insert Into DELTAS.TABLE
    Select * From sp_get_Deltas @TheDate = '1/2/03', 'TheTable'
Insert Into DELTAS.TABLE
EXEC sp_get_Deltas @TheDate = '1/2/03', 'TheTable'