【问题标题】:How to check column does not exist in SQL Server CE如何检查 SQL Server CE 中不存在的列
【发布时间】:2013-10-01 12:55:27
【问题描述】:

如果我在 SQL Server CE 中运行以下 SQL,

alter table audit add new_key nvarchar(100) null

在尝试将列添加到同一个 SQL 语句之前,是否可以对其进行更改以检查该列是否存在?我知道你可以在 SQL Server 中很容易地做到这一点,但是 SQL Server CE 呢?

【问题讨论】:

    标签: sql sql-server-ce


    【解决方案1】:

    如果您正在寻找可以使用 SQL Server 执行的操作:IF NOT EXISTS (...,不幸的是,这对于 SQL Server Compact 是可能的(不支持 T-SQL IF) .见SQL Reference (SQL Server Compact)

    基于this thread,你可以这样做:

    select * from Information_SCHEMA.columns
    where Table_name='audit' and column_name='new_key'
    

    (即没有结果=不存在)。

    另请注意,SQL Server Compact 根本不支持批处理查询。因此,您无法检查列是否存在并在需要时添加列在同一 SQL 语句中

    或者,如果您正在寻找可用于 VB.NET 或 C# 的 sn-p,请查看以下 SO 问题:How can I determine whether a column exists in a SQL Server CE table with C#?

    【讨论】:

      【解决方案2】:

      最简单的方法是查询 information_schema 并查看该列是否在其中。

      IF NOT EXISTS(
          SELECT * FROM information_schema.columns 
          WHERE Table_Schema = 'dbo'
          AND Table_Name = 'audit'
          AND Column_Name = 'new_key'
      ) BEGIN
        alter table audit add new_key nvarchar(100) null
      END
      

      【讨论】:

      • 其实还有更简单的方法。运行更改表查询。它要么添加列,要么抛出一个错误,解释为什么没有。好像添加列不是一个常规事件。
      • 好的,但是我说的是 SQL CE,您提供的查询不适用于 SQL CE。
      • 虽然我在技术上是错误的(如果 SQL CE 不支持);我留下了答案,因为 Dan 是正确的,因为您应该继续运行 alter 语句,然后在列已经存在时捕获错误。事先进行测试没有任何意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多