ALTER添加列后,立即UPDATE该列会报错

SQL 2008 R2

请看语句:

ALTER TABLE #t ADD col2 INT

UPDATE #t

SET col2 = 0

报错:列名‘col2‘无效。

但如果紧接的是SELECT,一切正常,可以发现col2成功添加到表中。

非要接UPDATE的话,必须在ALTER后GO一下,不然报错无悬念。

请问:能不能不GO,也能UPDATE。因为前面我定义了很多变量,一GO回到解放前,不甘心。

可以通过EXEC ,把UPDATE的执行计划生成放到执行时进行

ALTER TABLE #t ADD col2 INT

EXEC(‘

UPDATE #t

SET col2 = 0

‘)

sql 的执行,是先分析并生成执行计划,再做实际的执行

当你把 alter table 和 update 放在一齐的时候,在分析并生成执行计划这步,由于列不存在,所以无法为 update 生成执行计划,所以就报错了

所以最好的习惯是用go代替分号,养成好习惯

注意使用go的时候需换行

Sql Server 增加字段、修改字段、修改类型、修改默认值

1、修改字段名:

  alter table 表名 rename column A to B

2、修改字段类型:

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

3、修改字段默认值   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

4、增加字段:

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

5、删除字段:

  alter table 表名 drop column 字段名;

原文地址:https://www.cnblogs.com/firstdream/p/10271012.html

时间: 2024-10-07 15:18:59

ALTER添加列后,立即UPDATE该列会报错的相关文章

如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值

如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1.  输入 单价,数量,计算金额   http://www.360doc.com/content/13/1212/19/3827427_336665778.shtml 重点是:设置Column 的属性值(Properties),响应事件:cxGridDbTableViewColumnPropertiesChange 获得列的值的方法

插入图片后R文件变红,报错“Error::app:mergeDebugResources'. > Some file crunching failed, see logs for detail”

本想做一个有爱的小东西,插入图片后发现原本之前运行成功的程序, 出现了报错“:app:mergeDebugResources'. > Some file crunching failed, see logs for detail” 一脸懵逼~~~这是什么鬼,在别人的回答和博客里找找解决办法. 不过对我好像不管用,找了好久才发现是图片的问题. 之前只是简单的在重命名的时候把图片改成“xx.png”,放在了app/src/main/res/drawable文件夹里(ps:目前每次我都是在复制图片再粘

Oracle Enterprise Manager 11g 输入用户名和口令 点击“登录”按键后没反应,也不报错,是什么原因?

在tnsnames.ora文件中检查设置好像没什么问题,用sqlplus也可以正常操作orcl 问题找到了,其实可简单,https://localhost:1158/em/console/logon/logon#,我用的是IE8打开这个地址,后来注意到左下角的状态栏里显示有“网页上有错误”的提示,于是改用Firefox打开,输入用户名和密码,登录就正常了.原因是IE8在解析这个页面时,部分js代码解析错误,我想这个跟微软的垄断霸王标准有关,他的很多规则不符合国际标准.所以电脑上还是多装个浏览器比

Ubuntu 14.04安装完ISE14.4后命令行下运行nautilus报错

我习惯在Terminal下用nautilus命令进入图形界面的文件夹视图,但是在安装完Xilinx ISE14.4后,运行这个命令就会报错: nautilus: /usr/Xilinx/Software/14.4/ISE_DS/ISE/lib/lin64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/x86_64-linux-gnu/libexempi.so.3) nautilus: /usr/X

Eclipse中在android项目中出现新建一个Activity后,出现整个工程的报错以及包导入以后无法运行等等情况分析。

今天用Eclipse去写android项目,然后后面需要建一个Blank  Activity后,很正常的建立的,然后那个Activity是基于ActionBarAtivity,要导入v7,结果因为这个v7的原因,导致原来的导入包不见了,而且重新导入的时候,虽然工程开启没有报错误,但是接下来在运行的时候,结果运行不了,Logcat出现Classnotfound,但是之前的工程一点事都有.折磨了半天,终于发现错误所在,兼容性问题就不说了,说一下应该怎么解决这样的报错.那就是在新建的时候,你新建一个E

Eclipse中在android项目中出现新建一个Activity后,出现整个project的报错以及包导入以后无法执行等等情况分析。

今天用Eclipse去写android项目,然后后面须要建一个Blank  Activity后,非常正常的建立的.然后那个Activity是基于ActionBarAtivity,要导入v7,结果由于这个v7的原因,导致原来的导入包不见了.并且又一次导入的时候,尽管project开启没有报错误,可是接下来在执行的时候,结果执行不了.Logcat出现Classnotfound,可是之前的project一点事都有.折磨了半天,最终发现错误所在,兼容性问题就不说了,说一下应该怎么解决这种报错.那就是在新

Xcode卸载7.3后重装7.2新建playground报错:Unable to find execution service for selected run destination.

Xcode升级7.3之后,出现了种种问题,虽然代码提示更加人性化了,但是导入框架后,出现了类没有提示等相关问题,一定程度上降低了开发效率.一怒之下装回7.2版本,却在安装后发现新建playground界面以及打开playground文件时一直弹框报错,错误提示如下: Unable to find execution service for selected run destination. 解决办法: 1.手动删除了 Library/Developer/CoreSimulator/Devices

node升级后,项目中的node-sass报错的问题

之前可能因为电脑不知道哪抽风了,在npm build的时候进入就卡在入口的地方,启动express的时候也会,所以就重装了一下node 重装node 其实也不是重装,就是使用 where node 查看node的安装目录,然后下载新版本的node,覆盖安装就是了 原本node v8.x 更新后 node v10.x,但是express启动还是卡主了,不懂什么原因,但是悲剧的是,原来的vue详情启动的时候就报错了... ··· Module build failed: Error: Missing

eclispe集成Scalas环境后,导入外部Spark包报错:object apache is not a member of package org

在Eclipse中集成scala环境后,发现导入的Spark包报错,提示是:object apache is not a member of package org,网上说了一大推,其实问题很简单: 解决办法:在创建scala工程是,到了创建包的这一步是我们要选择: 而不是创建java工程是的Java程序的包类型:然后创建scala类的时候也是一样,注意选择是scala class而不是java class. 这样创建的项目,我们在将外部包,build path进来后,发现不再报错. 原文地址:

Fedora升级后Python虚拟环境中的pip报错

今日Fedora从28升级到29后,进入Python的虚拟目录后,本来想使用pip更新下包,结果报错了,如下: Traceback (most recent call last): File "/home/kowalski/Projects/rifm/venv/bin/pip", line 7, in <module> from pip._internal import main ModuleNotFoundError: No module named 'pip' 自己也没