【问题标题】:Stored Procedure to Insert the result of a parameterized OPENQEURY into a local table将参数化 OPENQEURY 的结果插入本地表的存储过程
【发布时间】: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


【解决方案1】:

你快到了。这适用于普通的存储过程。让我们看看它是否适用于使用 Mindbending OPENQUERY

的 SP
Insert Into DELTAS.TABLE
EXEC sp_get_Deltas @TheDate = '1/2/03', 'TheTable'

当然,来自 EXEC 的列列表必须与目标表匹配。

如果您遇到错误,请发布它们。

【讨论】:

  • 行得通!现在你提供了解决方案,我明白为什么它是有意义的。谢谢!
  • ... 我相信它出错的原因是“嵌套”(?)隐藏了一个“Select * Select *”,这显然会导致问题。
  • 嗯.. select * from storedprocedure 在任何情况下都不会有效。如果它是一个表值函数,它有效的。
猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 2013-10-19
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
相关资源
最近更新 更多