题
是否有确定一个数据库表已经存在的或可移植的方式不
解决方案
便携式?我不这么认为。
也许你能得到的最接近的是:
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
请查询尽可能简单,以防止其他可能的错误。
不隶属于 StackOverflow