我正在使用MYSQL并且需要一个存储过程,该过程将遍历包含100列和50,000多行的表A,对于表中的所有Null值,SP将使用空值更新它。
例如 UPDATE表一个SET column1 =''其中column1为IS NULL; column1是null和填充行和空行的混合,但我想只更新空行。
我不想硬编码列名...想要在存储过程本身中逐个获取列。这可能吗?
答案 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