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

  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. Oracle 数据迁移(从Oracle11G迁移到更高的版本号Oracle10G低版本号)

    1.数据库状况    生产环境是11G,linux系统,測试环境是10G,windows系统,须要从生产环境导出一个用户下全部的数据,导入測试环境中. 由于数据量比較小,准备採用EXP和IMP工具来做 ...

  2. WebApi异常

    WebApi异常处理解决方案   前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定 ...

  3. java api例子网站

    http://www.programcreek.com/java-api-examples/ http://www.apihome.cn/api/list/ http://www.docjar.com ...

  4. Oracle连接池

    原由:许多用户可能在查询相同的数据库以获取相同的数据.在这些情况下,可以通过使应用程序共享到数据源的连接来提高应用程序的性能.否则,让每个用户打开和关闭单独的连接的开销会对应用程序性能产生不利影响.这 ...

  5. OpenGL3D迷宫场景设计

    近期学习用opengl库来构建一个3D场景,以及实现场景漫游.粒子系统等效果.终于算是是做了一个3D走迷宫游戏吧. 感觉近期学了好多东西,所以有必要整理整理. 一 实现效果 watermark/2/t ...

  6. coco2d-x 基于视口的地图设计

    <pre name="code" class="plain"> 基于视口的地图设计 DionysosLai 2014-06-14 第三人称游戏,玩家 ...

  7. 华为-on练习--小写字符数的统计显示

    主题: 手动输入一个字符串,只有小写字母,统计每个字符和输出频率中出现的串,输出.提示可以使用map 样例:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用 ...

  8. 通过action 跨进程启动activity

    在一些场景中我们需要从一个进程启动另外的一个应用的activity,这有什么好办法? 这里介绍一种方法,通过自定义 action 通过filter来启动. 如果你需要启动一个你自己写的另一个app的a ...

  9. 【oracle案件】ORA-19502,ORA-27072

    1.1.1. ORA-19502,ORA-27072 日期:2014-05-12 00:12 环境:试验机 [错误号] $ oerr ora 19502 19502, 00000, "wri ...

  10. Mvc后台接收 参数

    @Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...