C# 如何使用PLSQL更新指定列的数据库表的行条目

C# 如何使用PLSQL更新指定列的数据库表的行条目,c#,mysql,sql,C#,Mysql,Sql,我正在编写一个SQL脚本文件,当我将软件从较低版本升级到较高版本时,会运行该文件。在更高版本的软件中,他们将对数据库模式进行一些更改(即删除一列并添加一个新列),到目前为止,关于更改数据库列和删除给定列,我不面临任何问题。这两种方法都很好 但是假设我在较低版本上,并且我的列中保留了一些数据,这些数据将从较高版本的数据库中删除,并且在数据库表中添加了一个新列,然后,我想根据数据库中前一列的特定条件将现有数据保存到新列中,方法是循环数据库的每一行,检查前一列数据中的某些条件,并根据其结果将一些新数据

我正在编写一个SQL脚本文件,当我将软件从较低版本升级到较高版本时,会运行该文件。在更高版本的软件中,他们将对数据库模式进行一些更改(即删除一列并添加一个新列),到目前为止,关于更改数据库列和删除给定列,我不面临任何问题。这两种方法都很好

但是假设我在较低版本上,并且我的列中保留了一些数据,这些数据将从较高版本的数据库中删除,并且在数据库表中添加了一个新列,然后,我想根据数据库中前一列的特定条件将现有数据保存到新列中,方法是循环数据库的每一行,检查前一列数据中的某些条件,并根据其结果将一些新数据填充到我在更高版本中添加的新列中

一旦我的现有数据保存到新列,我就会删除我想要删除的列

Eaxmple-假设我的更高版本的vesrion数据库包含sequence\u name,而更低版本的数据库表包含sequence\u id

如何编写一个程序来保存存储在序列id中的数据,根据对序列id值的一些检查,将填充数据更新到序列名称

我已经为它编写了一个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;
请帮助我有点困惑,我的数据库服务器MySQl。
谢谢

我将提供一个概念性的答案,但没有代码。您可以创建一个新表,其临时名称与您希望实现的新列结构相匹配。然后,对于旧表中的每一行,执行逻辑并插入到新表中。完成后,您的所有行都将位于新表中,并且对您的列执行了逻辑,该列不仅插入了(即,您将值“Foo”的所有实例转换为“Bar”,还直接插入了所有其他值)。然后删除旧表并将新表重命名为旧表名。也许有一种更优雅的方法,但这是一种简单的暴力解决方案。

试试这样的方法- 更新
v\u live\u view\u screen\u config
t2,(选择 序列id、序列名称来自
v\u序列详细信息
)t1设置t2.sequence\u name=t1.sequence\u name,其中 t1.序列号=t2.序列号

也许这可能有用

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;