zoukankan      html  css  js  c++  java
  • SqlServer 添加列并赋值

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

    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
    

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

  • 相关阅读:
    Why to define my own blog skin
    安装drupal7.7
    同步和异步的区别
    神马是云计算神马是物联网
    zen主题安装图文记录
    《那些年啊,那些事——一个程序员的奋斗史》——127
    《一个程序员的奋斗史》帮我选封面哇! —— 猜封面页数赢赠书活动~
    《那些年啊,那些事——一个程序员的奋斗史》——126
    《那些年啊,那些事——一个程序员的奋斗史》——128 (终章)
    伍定轩乱语
  • 原文地址:https://www.cnblogs.com/grj1046/p/5287311.html
Copyright © 2011-2022 走看看