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 产生以下错误消息:
我确定我错过了一些基本的东西,但是尝试在“更改”之后放置“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 原来它最适合你的原因可能是因为当批处理被编译时表本身不存在,这意味着引用该表的所有语句都会被延期编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |