遍历表并使用Null值更新列

时间:2015-05-23 20:56:35

标签: mysql

我正在使用MYSQL并且需要一个存储过程,该过程将遍历包含100列和50,000多行的表A,对于表中的所有Null值,SP将使用空值更新它。

例如 UPDATE表一个SET column1 =''其中column1为IS NULL; column1是null和填充行和空行的混合,但我想只更新空行。

我不想硬编码列名...想要在存储过程本身中逐个获取列。这可能吗?

2 个答案:

答案 0 :(得分:0)

您可以从表中动态获取列名。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

使用内部查询结合使用。

答案 1 :(得分:0)

使用mysql ifnull函数。您需要以下所有百列。这可以用于字符串/字符以及整数字段。

update table 
set 
field1=ifnull(field1, " "),
field2=ifnull(field2, " "),
field3=ifnull(field3, 0),
field4=ifnull(field4, "")....

如果您不想对列名进行硬编码,可以按照其他答案构建上述查询:

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

对于上述每一行,请构建一个连续的更新语句。

DEClARE usercursor CURSOR FOR  
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

declare updatesql varchar(3000);

set updatesql = "update TABLE set ";

OPEN usercursor
get_users:LOOP
FETCH usercursor into v_username;

set updatesql = concat(v_username,"=ifnull(",updatesql)
set updatesql = concat(v_username,",' '),",updatesql)

END LOOP get_users