ALTER添加列後,當即UPDATE該列會報錯

SQL 2008 R2html

請看語句:sql

ALTER TABLE #t ADD col2 INTpost

UPDATE #thtm

SET col2 = 0blog

報錯:列名'col2'無效。get

但若是緊接的是SELECT,一切正常,能夠發現col2成功添加到表中。it

非要接UPDATE的話,必須在ALTER後GO一下,否則報錯無懸念。table

請問:能不能不GO,也能UPDATE。由於前面我定義了不少變量,一GO回到解放前,不甘心。class

 

能夠經過EXEC ,把UPDATE的執行計劃生成放到執行時進行變量

 ALTER TABLE #t ADD col2 INT

EXEC('

UPDATE #t

SET col2 = 0

')

 

sql 的執行,是先分析並生成執行計劃,再作實際的執行

 當你把 alter table 和 update 放在一齊的時候,在分析並生成執行計劃這步,因爲列不存在,因此沒法爲 update 生成執行計劃,因此就報錯了

因此最好的習慣是用go代替分號,養成好習慣

注意使用go的時候需換行

 

 

 

 

 

Sql Server 增長字段、修改字段、修改類型、修改默認值

 

一、修改字段名:

  alter table 表名 rename column A to B

二、修改字段類型:

  alter table 表名 alter column 字段名 type not null

三、修改字段默認值   alter table 表名 add default (0) for 字段名 with values

  若是字段有默認值,則須要先刪除字段的約束,在添加新的默認值,

  select c.name from sysconstraints a   inner join syscolumns b on a.colid=b.colid   inner join sysobjects c on a.constid=c.id   where a.id=object_id('表名')   and b.name='字段名'

  根據約束名稱刪除約束

  alter table 表名 drop constraint 約束名

  根據表名向字段中增長新的默認值

  alter table 表名 add default (0) for 字段名 with values

四、增長字段:

  alter table 表名 add 字段名 type not null default 0

五、刪除字段:

  alter table 表名 drop column 字段名;

相關文章
相關標籤/搜索