【问题标题】:Getting Error with ##TempTable##TempTable 出错
【发布时间】:2013-11-21 02:29:58
【问题描述】:

我想在我的 sql Server 查询中使用 ##TempTable 从 oracle db 获取值,但总是出错,错误提示

##TempTable is Invalid object name '##TempTable '.

这是我使用##TempTable的代码

SET @sQuery = 'SELECT * INTO ##TempTable 
FROM OPENQUERY(ITCP,''SELECT * FROM DB.WINFO WHERE SCH_DATE = '''''+ 
CONVERT(VARCHAR(10),@DDATE,121) +''''''' ) A' EXEC(@sQuery)

我很困惑,我应该像往常一样声明查询来创建##TempTable 还是通过该查询自动创建临时表?因为我总是出错

【问题讨论】:

  • 提前创建##TempTable 并做INSERT INTO ##TempTable SELECT *... 是否有效?
  • 是的,它可以工作,但我担心后来我不知道 ora db 的结构,我无法先创建表,是否可以像从 openquery 插入 ##sometable 那样进行查询?
  • 只是为了确认 - 您在上面的 EXEC(@sQuery) 或其他地方遇到了错误?
  • @YuriyGalanter 是在 EXEC(@sQuery)

标签: sql sql-server temp-tables openquery


【解决方案1】:

我认为问题在于您的临时表是在一个范围内创建的,而您的动态查询是在另一个范围内执行的。

有几件事可以尝试:

  1. 首先创建##temptable,然后将其填充到您的动态查询中。

  2. 尝试在表名前加上 tempdb..(所以 tempdb..##temptable)。

  3. 使用持久表(不是临时表)。

希望这会有所帮助。

【讨论】:

  • 嗯,我明白了,所以最好像 tempdb 那样创建数据库,只需从 oracle 中删除值以防止出现这些错误,并从任何临时表中清除我的主数据库。
  • 其实##是一个全局临时表,应该在所有范围内都是可见的。哦,尤其是在创作过程中
猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2013-09-10
  • 2023-03-23
  • 2014-09-15
  • 2014-10-04
  • 2019-11-08
  • 2011-02-16
相关资源
最近更新 更多