我正在构建一个小脚本作为函数或存储过程,以便只能在没有名为“address”的列的表中更改表结构。
如果表中没有列地址,则脚本将添加它:
ALTER TABLE XXXX ADD COLUMN address VARCHAR(150) NULL after command;到目前为止,通过查询information_schema.COLUMNS表,我已经找到了访问结构上有'address‘列的表列表的方法;这样的东西不是我需要的,因为我需要的正好相反,这是一个结构上没有'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;这就是我需要的东西,它需要验证列名address,并且它将仅在列不存在时尝试添加该列,否则它将返回一个异常,查询将终止。
另一种可能是在名为'address‘的列存在的情况下处理异常,这样无论异常是否返回,都能够继续操作,只是继续执行查询,所以没有异常的表将被更新……
发布于 2014-04-10 22:13:40
为此,您必须构建动态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'
)如果这不是您每天都要做的事情,那么就不需要部署存储的Proc了,对吧?
如果你真的想要它,那么你有太多的选择--将字符串添加到一个变量中,用光标遍历集合,等等。
https://stackoverflow.com/questions/22969872
复制相似问题