2015-05-23 66 views
0

蔭工作MYSQL和需要一個存儲過程,將通過表遍歷,其具有100列和行50000和用於在表中找到的所有空值的SP將更新它與空白值。橫移通過與空表,並更新列中的值

例如 UPDATE表阿SET COLUMN1 =」',其中column1爲NULL; column1是空行和空行的混合,但我只想更新空行。

我不想硬編碼列names..want逐一提取列在存儲過程中itself.is這可能嗎?

回答

0

你可以動態地從你的表獲取列名。

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

並結合使用內部查詢。

+0

我的一些列的數據類型爲int ...可以將這樣的列變爲空白,其中有空 –

0

使用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