我正在构建一个小脚本作为函数或存储过程,以便只能在没有名为' address'。
的列的表中更改表结构。如果表格没有列地址,那么脚本会添加它:
ALTER TABLE XXXX ADD COLUMN address VARCHAR(150) NULL after command;
到目前为止,我已经找到了访问表列表的方法,该列表中的列是“地址”。在其结构上通过查询information_schema.COLUMNS表;这样的事情不是我需要的,因为我需要恰恰相反,这是表格列表中没有名为' address'在它的结构上。
所以基本上是一个需要做这样的事情的脚本:
ALTER TABLE
(SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME LIKE 'mytable_%' AND COLUMN_NAME = 'address')
ADD COLUMN IF NOT EXISTS address VARCHAR(150) NULL after command;
这就是我需要的东西,它需要验证列名地址,并且只有在它不存在时才会尝试添加列,否则它将返回异常并且查询将会死亡。
无法使用PHP或任何其他编程语言,因为将升级超过4000个表,并且在数据库完成操作之前,http请求将会消失。
另一种可能性是在存在名为' address'的列的情况下处理异常。无论异常是否返回,都可以继续操作,只需继续执行查询,这样就可以更新没有异常的表....
答案 0 :(得分:0)
您必须为此构建动态SQL。最好的办法就是这样做
OOTOMH代码
Select 'Alter table ' + TableName ' + Add Address VarChar (150)'
From Information_schema.Tables T
Where Not Exists
(
Select 1
From Information_schema.Columns C
Where C.TableName = T.TableName
And C.ColumnName = 'Address'
)
现在您已经生成了代码,您可以手动执行它。
如果这不是你每天都做的事情,那么就没有必要部署存储过程,是吗?
如果你真的想要它,那么你有很多选择 - 将字符串添加到变量中,使用光标循环遍历集合等。