有个需求,需要给某张表添加一列并且赋值,分解需求,一共分两部走:

  1. 添加列
  2. 赋值

两个功能都不难,很快实现。


--add column
alter table Med_Summary_Template
add SummaryTypeID varchar(10); --set column value
declare @ProgramName varchar(50), @SummaryType varchar(50), @SummaryTypeID varchar(10)
declare Cur_Smmary
cursor for select ProgramName, SummaryType from Med_Summary_Template
open Cur_Smmary
fetch next from Cur_Smmary into @ProgramName, @SummaryType
while @@FETCH_STATUS = 0
begin
select @SummaryTypeID = SummaryTypeID from Med_ProgramSummaryType
where ProgramName = @ProgramName and TypeName = @SummaryType;
if exists (select @SummaryTypeID as t)
begin
update Med_Summary_Template set SummaryTypeID = @SummaryTypeID
where ProgramName = @ProgramName and SummaryType = @SummaryType;
end
fetch next from Cur_Smmary into @ProgramName, @SummaryType
end
close Cur_Smmary
deallocate Cur_Smmary

运行正常。

但由于脚本是需要提供给客户的,需要能够重复运行而不能够报错,则改为了,如果该列存在,则不进行任何操作。然后加了个if判断

if not exists(select * from sys.columns where [object_id] = object_id('Med_Summary_Template') and name = 'SummaryTypeID')
begin
--add column and set column value
end

然而很不给力

Msg 207, Level 16, State 1, Line 19

Invalid column name 'SummaryTypeID'.

然后又给两步操作添加事务,但是SqlServer很不给力,总是报这个错,要么就是列添加上去了但是没有添加上数据。查了许久,没有头绪,只好去问领导,随后恍然大悟。原来修改表结构操作和update之类的数据操作是不能存在于一个事务的。然后说我update数据的方式写的太麻烦,然后直接撸了一个简单的。#表示第一次见这样用,新技能get

update Med_Summary_Template
set SummaryTypeID = b.SummaryTypeID
From Med_Summary_Template as a Inner Join Med_ProgramSummaryType as b ON
a.ProgramName=b.ProgramName And a.SummaryType = b.TypeName

完整代码如下。

go
if not exists(select * from sys.columns where [object_id] = object_id('Med_Summary_Template') and name = 'SummaryTypeID')
alter table Med_Summary_Template add SummaryTypeID varchar(10);
go
update Med_Summary_Template
set SummaryTypeID = b.SummaryTypeID
From Med_Summary_Template as a Inner Join Med_ProgramSummaryType as b ON
a.ProgramName=b.ProgramName And a.SummaryType = b.TypeName
go

表示真的比我写的简洁多了 -_-#

SqlServer 添加列并赋值的更多相关文章

  1. sqlserver添加列(字段)描述

    1.我的表 [id],[name],[type],[date]四个字段,,,表名是library 2.添加列描述 姓名:描述信息 library:表名 被描述字段:name EXECUTE sp_ad ...

  2. MySQL 添加列, 修改列, 删除列

    ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 查看数据库创建语句: show create database 数据库名: 查看创建表的语句: show c ...

  3. MySQL 语句大全--------添加列,修改列,删除列

    ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table ...

  4. MySQL 添加列,修改列,删除列

    ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table ...

  5. MySQL 中添加列、修改列以及删除列

    ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:); 删除列:alte ...

  6. C#;DataTable添加列;DataTable转List泛型集合;List泛型集合转DataTable泛型集合;

    给DataTable添加列 string sql = "select * from cgpmb order by code"; DataTable dt = Bobole.Data ...

  7. 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

  8. [转]RDLC报表——动态添加列

    本文转自:http://www.cnblogs.com/pszw/archive/2012/07/19/2599937.html 前言 最近接到一个需求:在给定的数据源中,某(些)列,可能需要单独统计 ...

  9. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

随机推荐

  1. eclipse 安装vrapper vim插件

    http://vrapper.sourceforge.net/update-site/stable 如果安装不上,设置下代理./window/pereference/network* - manul

  2. UVA 11324 - The Largest Clique(强连通分量+缩点)

    UVA 11324 - The Largest Clique 题目链接 题意:给定一个有向图,要求找一个集合,使得集合内随意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点 思路:强连通分 ...

  3. JS 数字 、中文、 英文、判断

    <pre name="code" class="html">单独的验证: 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中 ...

  4. SecureCRT学习之道:用SecureCRT来上传和下载数据

    今天才知道,原来SecureCRT可以使用linux下的zmodem协议来快速的传送文件,而且还使用非常方便哦,我还傻傻的找其他软件来sftp,笨死了:(你只要设置一下上传和下载的默认目录就行opti ...

  5. 基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台

    一.安装准备 1.1平台环境: CentOS 5.4 x86_64 GNU/Linux nginx-0.8.21 php-5.2.9 spawn-fcgi-1.6.3 mysql-5.1.34 .2系 ...

  6. Ubuntu 组态 Tomcat而每天的错误解决

    统环境:Ubuntu 14.10 安装版本号:apache-tomcat-7.0.54.tar.gz 安装步骤: 1.下载 Tomcat 下载 apache-tomcat-7.0.54.tar.gz ...

  7. 观察者模式(Observer Patterns)

    今天学习了观察者模式,做个总结,方便以后回想. 首先是定义:观察者模式就是定义对象之间一对多的依赖关系,当一个对象状态发生改变时,全部依赖他的对象都收到推送消息并自己主动更新做出改变. 我的理解:生活 ...

  8. Phoenix Framework对于Tree该方法节点设置不同的图标,每个

    在包Javax Swing的Tree对象.我们需要设置不同的图标为每个节点.它封装了一个通用的方法: 用法: jTree1.setCellRenderer(new TreeNodeRender(cas ...

  9. Oracle SQL Lesson (10) - 使用DDL语句创建和管理表

    数据库对象TableViewSequenceIndexSynonym 对象名称最长30个字符,不能与当前用户下其他对象重名.create table "select" as sel ...

  10. Win 10开门人类智慧的世界领先

    3月18日,从微软硬件project大会(WinHEC 2015)上传来好消息:今年夏天,Win 10将要正式公布.Win 10公布,有何新意? 微软新领导人纳德拉(Nadella)主张:运计算,大数 ...