我们已将数据库从int升级为bigint。但是我们希望选择作为最后一个选项迁回。此时我们需要更改数据库。
所以基本上迭代所有表和列,如果类型== bigint改为int。到目前为止,我还没有找到一个好方法。
我们支持bot postgres sql和sql server。不确定这可以以统一的方式完成,还是需要两个版本。
答案 0 :(得分:2)
您只需生成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'
答案 1 :(得分:0)
您可以在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中做同等的工作,但是......