首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改多表结构的Mysql存储过程

修改多表结构的Mysql存储过程
EN

Stack Overflow用户
提问于 2014-04-10 01:32:16
回答 1查看 129关注 0票数 0

我正在构建一个小脚本作为函数或存储过程,以便只能在没有名为“address”的列的表中更改表结构。

如果表中没有列地址,则脚本将添加它:

代码语言:javascript
运行
复制
ALTER TABLE XXXX ADD COLUMN address VARCHAR(150) NULL after command;

到目前为止,通过查询information_schema.COLUMNS表,我已经找到了访问结构上有'address‘列的表列表的方法;这样的东西不是我需要的,因为我需要的正好相反,这是一个结构上没有'address’列的表列表。

所以基本上就是一个脚本,需要做这样的事情:

代码语言:javascript
运行
复制
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;

这就是我需要的东西,它需要验证列名address,并且它将仅在列不存在时尝试添加该列,否则它将返回一个异常,查询将终止。

另一种可能是在名为'address‘的列存在的情况下处理异常,这样无论异常是否返回,都能够继续操作,只是继续执行查询,所以没有异常的表将被更新……

EN

回答 1

Stack Overflow用户

发布于 2014-04-10 22:13:40

为此,您必须构建动态SQL。最好的办法就是这样做

OOTOMH代码

代码语言:javascript
运行
复制
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'
)

如果这不是您每天都要做的事情,那么就不需要部署存储的Proc了,对吧?

如果你真的想要它,那么你有太多的选择--将字符串添加到一个变量中,用光标遍历集合,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22969872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档