• 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
    

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

  • 相关阅读:
    ef core中如何实现多对多的表映射关系
    asp.net mvc 实现简单的实时消息推送
    C#中三层架构UI、BLL、DAL、Model实际操作
    搭建连接MySql的三层架构的ASP.NetCore2.0的WebApi
    基于.NET Core 框架搭建WebApi项目
    16位GUID
    VS2017企业版的密钥
    通过微软的cors类库,让ASP.NET Web API 支持 CORS
    Web API 跨域访问(CORS)
    [HDU1394]Minimum Inversion Number
  • 原文地址:https://www.cnblogs.com/grj1046/p/5287311.html
Copyright © 2020-2023  润新知