繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM