首页 > 解决方案 > 如何从 SQL DB 中找到列最大长度为 256 的表?

问题描述

我需要更新 maxlength 为 256 的某些表的列,那么有什么简单的方法可以找到 sql 表吗?

标签: sqlsql-server

解决方案


尝试这个:

SELECT DISTINCT OBJECT_NAME([object_id])
FROM sys.columns C
INNER JOIN sys.types T
    ON c.[system_type_id] = T.[system_type_id]
WHERE T.[name] IN ('VARCHAR', 'CHAR', 'NVARCHAR', 'NCHAR')
    AND C.[max_length] = 256;

要将所有列从 更新NVARCHAR(128)为 的图像NVARCHAR(256)。您可以使用以下脚本:

SELECT 'ALTER TABLE [' + SCHEMA_NAME(T.[schema_id]) + '].[' + OBJECT_NAME(T.[object_id]) + '] ALTER COLUMN [' + C.[name] + '] NVARCHAR(512);'
FROM sys.tables T
INNER JOIN sys.columns C
    ON T.[object_id] = C.[object_id]
INNER JOIN sys.types TY
    ON c.[system_type_id] = TY.[system_type_id]
WHERE TY.[name] =  'NVARCHAR'
    AND C.[max_length] = 512;

请注意,如果该列是索引的一部分,则应首先将其删除。然后,更改类型并重新创建索引。

另外,请注意,max_length是字节的长度。所以,对于VARCHAR(128)128,但对于NVARCHAR它是加倍的。


推荐阅读