【问题标题】:Insert column if it doesn't exist如果列不存在则插入
【发布时间】:2018-05-19 08:22:38
【问题描述】:

如果之前没有插入,我正在尝试在我的数据库中插入一个新列。 我的专栏是这样的

ALTER TABLE dbo.tSafeUnit ADD HasAccess24_7 tinyint not null default 0

我希望只有当它不在表中时才插入该列。

我的代码行只插入它,但不检查它是否存在。

【问题讨论】:

  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,不是特定数据库产品的名称。
  • 插入行是通过insert完成的不是通过ALTER TABLE
  • 我的错误,我正在尝试插入一个新列
  • 如果同名列已经存在,会报错。
  • 您想向表中添加一个新列。

标签: sql sql-server


【解决方案1】:

试试这个:

IF (SELECT COUNT(*) FROM syscolumns WHERE name = 'HasAccess24_7'
AND OBJECT_NAME(object_id) = 'tSafeUnit') = 0
BEGIN
    ALTER TABLE dbo.tSafeUnit ADD HasAccess24_7 tinyint not null default 0
END

【讨论】:

【解决方案2】:

如果你使用的是 MS SQL 服务器,那么你可以像下面这样:

IF COL_LENGTH('tSafeUnit', 'HasAccess24_7') IS NULL
BEGIN
    ALTER TABLE dbo.tSafeUnit 
    ADD HasAccess24_7 tinyint not null default 0
END

【讨论】:

    【解决方案3】:

    你可以试试这个。

    IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'HasAccess24_7' AND TABLE_NAME = 'tSafeUnit')
       AND EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tSafeUnit')
    BEGIN
        ALTER TABLE dbo.tSafeUnit ADD HasAccess24_7 TINYINT NOT NULL DEFAULT 0
    END
    

    【讨论】:

    • 根本不准确....如果 HasAccess24_7 存在于表 tSafeUnit_2 中会怎样?
    • 那么会发生什么?
    • 如果 HasAccess24_7 存在于另一个表中,那么它不会添加新列,您需要确保 HasAccess24_7 不存在于该特定表中,并且不存在于数据库中的每个表中跨度>
    • 哈哈哈...只要看看条件“COLUMN_NAME = 'HasAccess24_7' AND TABLE_NAME = 'tSafeUnit'”。谈到“并且不存在于数据库中的每个表中”,为什么同一列是否在任何其他表中可用很重要。 Endrit Sheholli 甚至问过这个问题吗?
    【解决方案4】:

    测试是否存在该架构中该表的列

    if not exists ( select 1 
                    from information_schema.columns 
                    where table_schema = 'dbo' 
                    and table_name = 'tSafeUnit' 
                    and column_name = 'HasAccess24_7')
    begin
        ALTER TABLE dbo.tSafeUnit ADD HasAccess24_7 TINYINT NOT NULL DEFAULT 0;
    end
    

    【讨论】:

    • 如果 tSafeUnit 不存在怎么办?
    • LOL...当我们没有任何答案时,它总是很有趣:P 仅据您所知,它会引发错误...
    猜你喜欢
    • 2018-09-17
    • 2014-06-11
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多