我們已將數據庫從int升級到bigint。不過,我們希望選擇遷移回最後一個選項。那時我們需要將數據庫改回來。SQL:遍歷數據庫中的所有列並更改類型
因此,基本上遍歷所有表和列,如果類型== bigint更改爲int。到目前爲止,我還沒有找到一個好辦法來做到這一點。
我們支持bot postgres sql和sql server。不確定這可以以統一的方式完成,或者如果需要兩個版本。
我們已將數據庫從int升級到bigint。不過,我們希望選擇遷移回最後一個選項。那時我們需要將數據庫改回來。SQL:遍歷數據庫中的所有列並更改類型
因此,基本上遍歷所有表和列,如果類型== 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中做同樣的事情,儘管...
...和information_schema是標準的,儘管有時候類型名稱之類的東西會有所不同,所以對於類型名稱差異可能需要某些OR或CASE語句。 –