Sql 对不存在的表进行联接
当一个或多个表甚至不存在时,是否可以联接表 考虑这个用例:您使用的系统具有某种现成的DB方案,但也允许您创建自己的自定义表 可以运行包含自定义表的某种查询,但对于未设置这些自定义表的用户也可以运行而不出错 或者,在不必维护不同版本的查询的情况下,实现这一点最优雅的方法是什么Sql 对不存在的表进行联接,sql,database,join,sybase,sap-ase,Sql,Database,Join,Sybase,Sap Ase,当一个或多个表甚至不存在时,是否可以联接表 考虑这个用例:您使用的系统具有某种现成的DB方案,但也允许您创建自己的自定义表 可以运行包含自定义表的某种查询,但对于未设置这些自定义表的用户也可以运行而不出错 或者,在不必维护不同版本的查询的情况下,实现这一点最优雅的方法是什么 编辑:特别是对于Sybase ASE,但我也对其他dbms感兴趣。您可以这样做: IF EXISTS (Select * from sysobjects where name = 'tblname') Begin Sele
编辑:特别是对于Sybase ASE,但我也对其他dbms感兴趣。您可以这样做:
IF EXISTS (Select * from sysobjects where name = 'tblname')
Begin
Select *
from tbl
End
Else
Begin
--Do something else
End
基本上检查表是否存在,如果存在,则运行查询;如果不存在,则执行其他操作。SQL Server
尝试使用Try/CATCH,它可以包含任何高达错误严重性20的内容
在您的情况下,您试图捕获错误严重性11-“表示给定的对象或实体不存在。”-这在TRY/catch块中应该可以
更多信息和示例如下:
在我的例子中,我专门用它来删除表——再也懒得用IF语句来检查表是否存在了
BEGIN TRY DROP TABLE XXX END TRY BEGIN CATCH END CATCH在大多数RDBMS中,查询执行如下所示:
IF EXISTS (Select * from sysobjects where name = 'tblname')
Begin
Select *
from tbl
End
Else
Begin
--Do something else
End
- 分析器
- 名称解析(检查引用对象、绑定别名等)
- 类型派生(确定结果集中的最终类型)
- 聚合bindinf(确定是否需要任何聚合)
- 组绑定(将聚合绑定到选择列表)
- 阿尔及利亚人
- 优化器
- 执行
对于Sybase,您可以在其在线文档中阅读有关查询处理的更多信息:您想使用的任何特定dbms?(使用信息_schema.tables查看该表是否存在,如果该表存在或不存在,则有单独的查询。)我的dbms将是Sybase ASE这实际上会在大多数系统上引发一个
无效对象名
错误或类似错误。您能在您的计算机上运行吗?我想没有。。它永远不会命中或者,如果tbl不存在,它只会抛出一个错误:)哦,是的,这是一个很好的观点。虽然我确信如果OP使用的是不同的DBMSThanks,也会有其他的选择,但是上面的内容应该只适用于SQL Server,你能提供一个简单的例子吗?