什么更好:检查表是不是存在或总是触发创建语句 [关闭]

Posted

技术标签:

【中文标题】什么更好:检查表是不是存在或总是触发创建语句 [关闭]【英文标题】:Whats Better: Check if table exists or always fire create statement [closed]什么更好:检查表是否存在或总是触发创建语句 [关闭] 【发布时间】:2013-11-14 16:47:17 【问题描述】:

是否可以始终触发创建语句而不是像检查它们一样

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME = 'my_table_name' 

在 SQL SERVER CE 和 C# 中。 因为无论采用何种方法,总会触发一个查询。是不是???

我正在使用 trasaction 来创建所有表。所以,我确定如果存在一张表,那么肯定会创建所有表。

所以如果我使用相同的事务,那么事务将在第一个 create table 语句处失败:但是这样好的性能明智吗???

【问题讨论】:

为什么要用 C# 创建表? 如果在创建时已经有同名表,您可能需要删除表/跳过创建。所以不行 【参考方案1】:

检查表是否存在或总是触发创建语句

如果表已经存在于数据库中,你会得到一个异常。

您可以检查表是否存在,删除然后创建它,例如:

if OBJECT_ID('dbo.my_table_name', 'U') IS NOT NULL
   DROP TABLE dbo.my_table_name;
--and then
CREATE TABLE ....

【讨论】:

是的,我总能捕捉到异常。是的,sql server ce 不支持“if”。【参考方案2】:

如果您的意思是尝试创建表并查找异常,那么不。异常代价高昂,如果处理不当,可能会意外终止您的程序。

最佳做法是检查表是否存在。

【讨论】:

不,如果我确实抓住了例外,那么??? 先检查还是比较好的做法。

以上是关于什么更好:检查表是不是存在或总是触发创建语句 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQLITE检查表users是不是存在的sql语句,如果不存在则创建表users

SQL 性能 - 更好地插入和引发异常或检查是不是存在?

检查mysql表php中是不是存在任何记录

如何创建触发器以检查更新的字段值

检查触发器是不是存在

sqlserver2005触发器问题