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

  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. HashMap源码解读(转)

    http://www.360doc.com/content/10/1214/22/573136_78188909.shtml 最近朋友推荐的一个很好的工作,又是面了2轮没通过,已经是好几次朋友内推没过 ...

  2. jQuery插件实战之fullcalendar(日历插件)Demo

    jQuery的插件许多,应用的场景也很丰富,今天我这里给大家介绍一款很有用的日历页面开发插件 - fullcalendar,眼下最新版本号是1.5.1,使用这款插件可以高速帮助你高速编程实现基于web ...

  3. MySQL创建用户权限结果Trigger失败

    说来惭愧,MySQL我已经在只将用于,非常赞赏阶段. 甚至一些比较深层次的管理,不熟悉如何,我们要加强啊! 最近.系统测试,使用MySQL数据库,你需要在表上创建触发器.该数据库是安装在机.但.在任何 ...

  4. Qt4.8在Windows下的三种编程环境搭建

    Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...

  5. jps查看java进程中哪个线程在消耗系统资源

    jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了.但值得一提的是jps命令是依赖于/tmp下的某些文件 的. 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无 ...

  6. OCP读书笔记(20) - 复制数据库

    没有连接到target的复制 将orcl数据库的备份复制为orcl1 一.创建orcl的备份: run{ backup database plus archivelog;} 二.复制数据库为orcl1 ...

  7. Effective C++规定45 附加代码

    这部分是额外的代码的博客.键45条款想法已经实现. #include<iostream> using namespace std; template<typename T> c ...

  8. java表达式陷阱

    以下是一些常见的面试java问题的表达,我将造成直接的形式附加目光. 问题1: int a = 10; int b = a + (a = 5) + a + (a = 10); System.out.p ...

  9. 十步完全理解SQL(转)

    本文由 伯乐在线 - 水果泡腾片 翻译.未经许可,禁止转载!英文出处:Lukas Eder.欢迎加入翻译组. 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同 ...

  10. 修改easyui datebox默认日期格式

    问题描述: 根据jquery easyui datebox demo中给的示例,导入和使用datebox, 发现日期格式为: 6/22/2011, 其他的今天和关闭也是 Today, Close, 对 ...