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

表示真的比我寫的簡潔多了 -_-#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM