添加列后如何立即更新数据 [英] How to update data immediatly after column has been added

查看:64
本文介绍了添加列后如何立即更新数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个任务:

创建SQL脚本以将列添加到数据库并立即更新.但是此脚本可以启动一次以上-因此仅在第一次时才需要执行此脚本(添加和更新).

这是我的解决方案:

I''ve a task:

Create SQL script to add the column to the database and update it immediately. But this script could be started more then one time - so it is required to this (add and update) only first time.

Here is my solution:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'PlateDistance')
BEGIN
	ALTER TABLE [OmniCalc].[dbo].[Table1]
	ADD [PlateDistance] decimal(18,0) default 0 NOT NULL;
	
	UPDATE [OmniCalc].[dbo].[Table1]
	SET [PlateDistance] = [bauteilAbstand] / 2
END

GO


但结果我得到了:

消息207,第16级,状态1,第13行
无效的列名"PlateDistance".

我尝试做一些更改以允许GO批处理,但是在这种情况下,无法避免脚本按方案覆盖用户数据的情况:

1.启动脚本

2.用户更改一些数据

3.再次启动脚本


But in result i get:

Msg 207, Level 16, State 1, Line 13
Invalid column name ''PlateDistance''.

I''ve tried to do some changes to allow GO batch processing, but in this case it is impossible to avoid situation when scripts overwrite user data by scenario:

1. Start script

2. User changes some data

3. Start script again

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
	WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'PlateDistance')
BEGIN
	ALTER TABLE [dbo].Table1
	ADD [PlateDistance] decimal(18,0) default 0 NOT NULL;
	
	Select [PlateDistance] from [dbo].Table1
END

GO

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
	WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'PlateDistance')
BEGIN
	UPDATE [dbo].Table1
	SET [PlateDistance] = [bauteilAbstand] / 2
END

GO



即使我将变量添加到构造中,也没有用,因为变量在GO运算符后丢失.



And even if I add variable to the construction - It does not help because variable is loss after GO operator.

DECLARE @created BIT;

SET @created = 0;

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
	WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'PlateDistance')
BEGIN
	ALTER TABLE [dbo].Table1
	ADD [PlateDistance] decimal(18,0) default 0 NOT NULL;
	
	Select [PlateDistance] from [dbo].Table1
	
	SET @created = 1;
END

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
	WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'PlateDistance') AND @created = 1
BEGIN
	UPDATE [dbo].Table1
	SET [PlateDistance] = [bauteilAbstand] / 2
END

GO




所以.问题-如何仅在第一个脚本运行时才添加列并立即更新其数据?




So. Question - how to ADD column and UPDATE its data immediately only on the first script run?

推荐答案

使用Sql触发器...

Use Sql Triggers...

delimiter


创建 TRIGGER stu_insert 之后插入 打开 stu_table FOR 每行 开始 插入 插入 stu_log(用户ID,说明) (用户(),CONCAT(' 插入学生记录', new.stu_id,' ',new.stu_name,' ',new.stu_class)); END
CREATE TRIGGER stu_insert AFTER insert ON stu_table FOR EACH ROW BEGIN INSERT into stu_log(user_id, description) VALUES (user(), CONCAT('Insert Student record ', new.stu_id,' ',new.stu_name,' ',new.stu_class)); END


定界符;


这篇关于添加列后如何立即更新数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆