加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 添加后更新新列时出现问题

发布时间:2020-12-12 16:34:03 所属栏目:MsSql教程 来源:网络整理
导读:给出以下SQL: IF EXISTS (SELECT * FROM sys.columns WHERE name = 'NewFieldName' AND object_id = OBJECT_ID('dbo.MyTableName')) RETURN-- Add NewFieldName column to part of the Summer 2012 release cycle.ALTER TABLE dbo.[MyTableName] ADD [NewFie
给出以下SQL:
IF EXISTS (SELECT * FROM sys.columns WHERE name = 'NewFieldName' AND object_id = OBJECT_ID('dbo.MyTableName'))
    RETURN

-- Add NewFieldName column to part of the Summer 2012 release cycle.
ALTER TABLE dbo.[MyTableName] ADD
    [NewFieldName] SmallINT NOT NULL
        CONSTRAINT DF_MyTableName_NewFieldName DEFAULT (2)

UPDATE [MyTableName] SET NewFieldName = 1 WHERE [Name] = 'FindMe' --Update one specific value

产生以下错误消息:

Msg 207,Level 16,State 1,Line 10 Invalid column name
‘NewFieldName’.

我确定我错过了一些基本的东西,但是尝试在“更改”之后放置“GO”,每次都会执行UPDATE,而我不想这样做.

如何构造这个语句,以便它会检查列是否存在,如果它不添加,然后设置在UPDATE语句中所述的值?

解决方法

在添加新列之后,需要引用要编译的新列的语句.执行此操作的一种方法是以EXEC作为子批次运行.
IF NOT EXISTS (SELECT * 
               FROM   sys.columns 
               WHERE  name = 'NewFieldName' 
                      AND object_id = OBJECT_ID('dbo.MyTableName')) 
BEGIN
  -- Add NewFieldName column to part of the Summer 2012 release cycle. 
  ALTER TABLE dbo.[MyTableName] 
           ADD [NewFieldName] SMALLINT NOT NULL 
           CONSTRAINT DF_MyTableName_NewFieldName DEFAULT (2) 

  EXEC(' UPDATE [MyTableName] SET NewFieldName = 1 WHERE [Name] = ''FindMe''') 
END

原来它最适合你的原因可能是因为当批处理被编译时表本身不存在,这意味着引用该表的所有语句都会被延期编译.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读