蔭工作MYSQL和需要一個存儲過程,將通過表遍歷,其具有100列和行50000和用於在表中找到的所有空值的SP將更新它與空白值。橫移通過與空表,並更新列中的值
例如 UPDATE表阿SET COLUMN1 =」',其中column1爲NULL; column1是空行和空行的混合,但我只想更新空行。
我不想硬編碼列names..want逐一提取列在存儲過程中itself.is這可能嗎?
蔭工作MYSQL和需要一個存儲過程,將通過表遍歷,其具有100列和行50000和用於在表中找到的所有空值的SP將更新它與空白值。橫移通過與空表,並更新列中的值
例如 UPDATE表阿SET COLUMN1 =」',其中column1爲NULL; column1是空行和空行的混合,但我只想更新空行。
我不想硬編碼列names..want逐一提取列在存儲過程中itself.is這可能嗎?
你可以動態地從你的表獲取列名。
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
並結合使用內部查詢。
使用MySQL IFNULL function.You將需要以下所有百柱。這可以用於字符串/字符以及整數字段。
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
我的一些列的數據類型爲int ...可以將這樣的列變爲空白,其中有空 –