转换SQL Server列的类型

时间:2017-11-23 10:50:25

标签: sql-server

我的SQL Server数据库中有超过80个表。我有超过500列。我想改变一些类型的列以释放空间。

我编写此脚本只是为了查看nvarnch初学者的列。

WHILE (SELECT * 
       FROM DATA.INFORMATION_SCHEMA.COLUMNS
       WHERE (DATA_TYPE LIKE 'nvar%' OR DATA_TYPE LIKE 'nch%'))
       --OR DATA_TYPE LIKE 'float%')
BEGIN
    PRINT 'change type in SCHEMA';
END

我应该添加到这个脚本或者我写另一个脚本来自动转换类型。

有人可以帮助我,我该怎么办?

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您考虑了评论者提出的问题,这可能就是您要找的内容。该脚本将根据您引用的表的数据准备供您使用的SQL语句。

请仔细检查其正确性。此外,我假设你想要新行和GO,但如果你不想要它们,你可以轻松删除它们。

SELECT
    AlterSql = CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ALTER COLUMN ', COLUMN_NAME, ' ', SUBSTRING(DATA_TYPE, 2, LEN(DATA_TYPE)), '(', CHARACTER_MAXIMUM_LENGTH, ') ', CASE IS_NULLABLE WHEN 'YES' THEN 'NULL' WHEN 'NO' THEN 'NOT NULL' ELSE 'ERROR' END, CHAR(13), CHAR(10), 'GO')
  , *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('nchar', 'nvarchar')