为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查SQLServer表中是否存在列?

如何检查SQLServer表中是否存在列?

万千封印 2019-07-04 18:18:11
如何检查SQLServer表中是否存在列?我需要添加一个特定的列,如果它不存在。我有如下内容,但它总是返回false:IF EXISTS(SELECT *           FROM   INFORMATION_SCHEMA.COLUMNS          WHERE  TABLE_NAME = 'myTableName'                  AND COLUMN_NAME = 'myColumnName')如何检查SQLServer数据库的表中是否存在列?
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

SQLServer 2005以后:

IF EXISTS(SELECT 1 FROM sys.columns 
          WHERE Name = N'columnName'
          AND Object_ID = Object_ID(N'schemaName.tableName'))BEGIN
    -- Column ExistsEND

马丁·史密斯的版本更短:

IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULLBEGIN
    -- Column ExistsEND


查看完整回答
反对 回复 2019-07-04
?
函数式编程

TA贡献1807条经验 获得超9个赞

更简洁的版本

IF COL_LENGTH('table_name','column_name') IS NULLBEGIN/* Column does not exist or caller does not have permission to view the object */END

关于查看元数据的权限的要点适用于所有答案,而不仅仅是这个答案。

注意,第一个参数表名为COL_LENGTH可以按要求采用一、二或三种部件名称格式。

引用不同数据库中的表的示例是

COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')

与使用元数据视图相比,此答案的一个不同之处是元数据函数(如COL_LENGTH无论有效隔离级别如何,始终只返回有关已提交更改的数据。


查看完整回答
反对 回复 2019-07-04
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

根据您的具体要求调整以下内容:

if not exists (select
                     column_name               from
                     INFORMATION_SCHEMA.columns               where
                     table_name = 'MyTable'
                     and column_name = 'MyColumn')
    alter table MyTable add MyColumn int

编辑以处理编辑到问题:这应该有效-仔细检查代码中是否有愚蠢的错误;例如,您是在应用INSERT的同一个数据库上查询Information_Schema吗?在这两种语句中,表/列名中是否都有错误?


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 2148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信