是否有确定一个数据库表已经存在的或可移植的方式不

有帮助吗?

解决方案

便携式?我不这么认为。

也许你能得到的最接近的是:

select * from <table>

和,这将返回一个错误,如果表中不存在。

其他提示

这是便携式,因为它得到,不幸的是:

select
    count(*)
from
    information_schema.tables
where
    table_name = 'tablename'
    and table_schema = 'dbo'

这肯定能行的SQL Server,MySQL和和Postgres上。与其说是在Oracle上,虽然。你必须访问Oracle数据字典了点。然而,有一个在甲骨文从数据字典中创建information_schema一个开源项目。你可以尝试,如果你需要绝对的便携性。

P.S.-模式不必被dbo,但是这是最常见的。

我会说

select 'x' from <table_name> where 0=1;

的缺点是,如果你得到一个错误,你不能肯定什么是真正的原因做。它可能缺少表或如连接错误。您可以分析错误消息,但绝对不会是便携。

在INFORMATION_SCHEMA视图ANSI标准 - 所以这些应该是你最便携的选择。不要忘了模式和表类型添加到您的where子句...

if exists(select  *
          from    information_schema.tables
          where   table_schema = 'dbo'
                  and table_name = 'MyTable'
                  and table_type = 'basetable')
begin
     -- your code here
end

下面的东西是合理便携式:

  

现在选择()从表1的限制;

它不依赖于任何特定列的知识。

它不会招致该计数的开销(*)有时具有

不要紧表是否是空的或不是。

如果表中不存在

它失败。

由于每个DBMS都有自己的元数据库中,我觉得最“便携”的方式做,这是使用的应用程序调用程序本身。类似

try
    execute("select top 1 * from table")
    return (true)
catch
    return false

尝试查询该表。如果查询失败 - 你得到一个错误,它不存在。

这可能是便携,你可以得到。产生的结果然后负担取决于代码查询表/数据库中。

select top 1 *
from MyTable

请查询尽可能简单,以防止其他可能的错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top