[英]SQL: Loop through all columns in a database and alter type
我们已将数据库从int升级为bigint。 但是我们希望选择作为最后一个选项迁回。 此时我们需要更改数据库。
所以基本上迭代所有表和列,如果type == bigint改为int。 到目前为止,我还没有找到一个很好的方法来做到这一点。
我们支持bot postgres sql和sql server。 不确定这可以以统一的方式完成,还是需要两个版本。
您只需生成ALTER语句即可
SELECT 'ALTER TABLE ' + TABLE_NAME + ' ALTER COLUMN ' + COLUMN_NAME + ' INT ' + CASE when IS_NULLABLE = 'NO' THEN 'NOT' END + ' NULL' + char(13) + 'GO'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'bigint'
您可以在PostgreSQL中创建一个函数来执行此操作:
CREATE OR REPLACE FUNCTION bigint_to_int() RETURNS VOID AS $$
DECLARE
m_Record RECORD;
BEGIN
FOR m_Record IN
SELECT information_schema.columns.table_name, information_schema.columns.column_name
FROM information_schema.columns
WHERE information_schema.columns.data_type = 'bigint'
AND information_schema.columns.table_schema = 'public'
LOOP
EXECUTE 'ALTER TABLE ' || QUOTE_IDENT( m_Record.table_name ) || ' ALTER COLUMN ' || QUOTE_IDENT( m_Record.column_name ) || ' TYPE INTEGER;';
END LOOP;
END;
$$ LANGUAGE plpgsql VOLATILE;
然后您可以使用以下方法调用它:
SELECT bigint_to_int();
您必须在SQL Server中执行等效操作,但...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.