如何一次调整所有NVARCHAR(n)列的大小



我想知道是否可以实现以下目标:

ALTER TABLE dbo.[Foo] 
ALTER COLUMN * NVARCHAR(500) 
WHERE Columns NVARCHAR(n) < NVARCHAR(500);

您可以使用information_schema.columns并构建一个动态sql查询来生成查询。仍然需要复制结果并手动运行它们。

select 'alter table '+TABLE_SCHEMA+'.'+TABLE_NAME+' alter column '+COLUMN_NAME+' NVARCHAR(500)' 
from INFORMATION_SCHEMA.columns 
where DATA_TYPE = 'nvarchar' 
and CHARACTER_MAXIMUM_LENGTH < 500 
and table_name = 'foo' 
and TABLE_SCHEMA = 'dbo'

在下方编辑

使用以下代码包括null/not null

select 'alter table ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] alter column ['+COLUMN_NAME+'] NVARCHAR(500) '+case when IS_NULLABLE = 'YES' then 'NULL' else 'NOT NULL' end 
from INFORMATION_SCHEMA.columns 
where DATA_TYPE = 'nvarchar' 
and CHARACTER_MAXIMUM_LENGTH < 500 
and table_name = 'foo' 
and TABLE_SCHEMA = 'dbo'

最新更新