【问题标题】:Find if the local temporary table exists in sql anywhere and use it查找本地临时表是否存在于sql中的任何地方并使用它
【发布时间】:2015-05-21 16:46:50
【问题描述】:

我想在任何地方用 SQL 编写一个过程,它可以检查本地临时表是否存在以及是否使用它。我不想放下桌子。我已经找到了一种删除本地临时表的方法:

DROP TABLE IF EXISTS t;

我还尝试了以下方法: 我创建了一个本地临时表 TEMP_TABLE。然后我尝试运行这个查询:

select object_id('tempdb..TEMP_TABLE')

这只是给我NULL。但是如果我尝试

select * from TEMP_TABLE

效果很好。

所以任何人都可以帮我找到一种方法来检查本地临时表是否存在于任何地方的 sql 中。

【问题讨论】:

  • 您使用的是什么版本的 Sybase?

标签: sql sybase sqlanywhere


【解决方案1】:

我不确定您使用的是什么版本的 Sybase,但这在 Sybase 11 中有效,所以我可以想象它也可以在任何版本中工作:

Begin
Create local Temporary table TEMP_TABLE (column1 int); //Create temp table
// any other code needed to be executed if table did not exist
Exception when others then
// Code to be executed when table does exist
end;

这基本上是sybase 的try..catch。如果临时表存在会抛出异常,在异常中你可以运行你想知道表已经存在的代码。

【讨论】:

  • 只是出于好奇,你知道为什么 tempdb 语法在任何地方的 sql 中都不起作用吗?我在任何地方都使用 sql 16。
  • 我真的不知道为什么。说实话有点奇怪。如果它在同一个事务中执行,它可以工作,但如果你正在寻找一个已经存在的临时表,它似乎不喜欢它,但我不知道为什么。
【解决方案2】:

在一个查询中您引用的是数据库,而在另一个查询中您不是,请尝试以下两个查询。

 select object_id('tempdb..TEMP_TABLE')
 select * from tempdb..TEMP_TABLE


select object_id('TEMP_TABLE')
select * from TEMP_TABLE

【讨论】:

  • 有问题的不是SAP SQL,它只是说SQL。我的查询将与 Microsoft SQL Server 一起使用。
  • OP 确实声明了“SQL Anywhere”,但小写字母“a”除外。
  • 查找本地临时表是否存在于 sql 任何地方并使用它和 SQL Anywhere,有问题的 sql 任何地方听起来更像是人们在询问如何访问临时表SQL 中的任何位置。
  • 更令人困惑的是我们在 SQL 和 tempdb 中有 object_id。我们还引用带有双点的数据库,例如 tempdb..Temp_TABLE。并且所提到的两个查询在整个 tempdb 和其他数据库的任何地方都可以在 SQL 中工作。
  • 问题是“SQL Anywhere”,并被标记为“sybase”和“sqlanywhere”。我认为很明显他不是在寻找与 MS SQL Server 一起工作的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2011-01-23
  • 1970-01-01
  • 2022-12-01
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多