【问题标题】:Drop table if exists in SQL Server CE如果 SQL Server CE 中存在表,则删除表
【发布时间】:2012-02-14 00:37:44
【问题描述】:

我浏览了整个互联网,但找不到可行的解决方案?我知道 SQL Server CE 中没有IF,所以我正在尝试其他不同的东西,但没有运气。有人知道可行的解决方案吗?

【问题讨论】:

  • 普通的DROP 并处理不存在时抛出的异常呢?
  • @KlausByskovHoffmann 我也这么想,但这将是我最后的手段,我想放弃首先通过 SQL 进行操作的可能性。感谢您的建议!

标签: sql-server-ce


【解决方案1】:

如何查询信息架构并查看表是否存在,在代码中,如果存在则删除它?

您可以使用如下查询:

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

如果存在,则触发 DROP 语句。

【讨论】:

  • 整个查询会是什么样子?我不能使用“IF”,所以我不确定选择后我需要做什么。
  • @Carlo,抱歉,我以为您正在通过一些用 C# 编写的代码与数据库进行交互,并且您可以通过 C# 查询数据库并在那里拥有您的 ifs。如果不是这种情况,那么正如您自己所说,SQLCE 中没有IF。我以为你在寻找替代方法。
  • 我们正在尝试运行 SQL 脚本来更新数据库版本。在这个版本中,我们需要删除一个表。我们不在 C# 中这样做的原因是因为我们不想在每次更改 DB 版本时更改更新 DB 的代码,我们只想添加一个 C# 知道如何运行的 SQL 脚本文件数据库版本。
【解决方案2】:

由于 SQL CE 不处理条件逻辑(或动态 SQL,或TRY/CATCH),我不知道有没有办法在纯 SQL 中做到这一点;你可能需要在你的 C# 程序中加入一些逻辑,而不是让它成为一个 SQL 脚本的愚蠢控制器,所有的大脑都生活在其中。

一些同样坏消息的相关问题:

How can I check whether a table exists in SQL Server CE 3.5

"If not exists" fails on SQL CE

【讨论】:

  • 或者,如果你可以生成要执行的sql,你可以SELECT @var = 'DROP TABLE ' + table_name FROM information_schema WHERE table_name = @tablename或其他东西
  • 不,SQL CE 中没有动态 SQL。显然你甚至不能说DECLARE
  • 但是,您可以使用 ALTER TABLE 打开和关闭 IDENTITY - 所以我将切换到 SQL CE。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多