我正在编写一个 SQL 脚本文件,当我将一些较低版本的软件升级到较高版本时运行该脚本文件。在更高版本的软件中,它们将是一些数据库架构更改(即删除一列并添加一新列)现在到目前为止关于更改数据库列和删除给定列我没有遇到任何问题两者都有效美好的。
但是假设如果我使用的是较低版本,并且我的列中保留了一些数据,这些数据将在较高版本的数据库中删除,并且新列被添加到数据库表中,那么我想将现有数据保存到基于新列的在数据库中前一列的特定条件下,通过循环数据库的每一行并检查前一列数据的某些条件,并根据其结果,我想将一些新数据填充到我在更高版本中添加的新列中。
将现有数据保存到新列后,我将删除我想要删除的列。
Eaxmple - 假设我的更高版本数据库包含 sequence_name和更低版本的数据库表包含 sequence_id。
如何编写一个程序来保存存储在sequence_id中的数据,以根据对sequence_id值的一些检查将填充数据更新到sequence_name中。
我已经为它编写了一个 SQL 程序,但它没有用,我的代码 -
BEGIN
FOR i IN SELECT sequence_id FROM v_live_view_screen_config LOOP
IF i.sequence_id <> -1 THEN
DECLARE @seqname VARCHAR(30);
INSERT INTO @seqname SELECT sequence_name FROM v_sequence_details WHERE
sequence_id = i.sequence_id;
UPDATE v_live_view_screen_config
SET sequence_name = @seqname;
WHERE sequence_id = i.sequence_id;
END IF;
END LOOP;
END;
我也试过这个-
create procedure findsequenceId()
begin
Declare cSequenceID varchar(30);
Declare cConfigID INT;
Declare cSequenceName varchar(30);
Declare done int default false;
Declare curSeq cursor for select configID,seqID from liveview;
declare continue handler for not found set done = true;
open curSeq;
loop_seq: loop
fetch curSeq into cSequenceId, cConfigID;
if done then
leave loop_seq;
end if;
select cSequenceName = seqName from seqDetails as m where m.seqID =
cSequenceID;
update liveview set seqName = cSequenceName where seqID = cSequenceID;
end loop;
close curSeq;
end;
请帮助我有点困惑,我的数据库服务器 MySQl。谢谢!
蓝山帝景
慕的地6264312
相关分类