SQL:遍历数据库中的所有列并更改类型

时间:2014-01-24 09:00:10

标签: sql sql-server postgresql

我们已将数据库从int升级为bigint。但是我们希望选择作为最后一个选项迁回。此时我们需要更改数据库。

所以基本上迭代所有表和列,如果类型== bigint改为int。到目前为止,我还没有找到一个好方法。

我们支持bot postgres sql和sql server。不确定这可以以统一的方式完成,还是需要两个版本。

2 个答案:

答案 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中做同等的工作,但是......

相关问题