DECLARE @s NVARCHAR(4000)
SET @s=''
SELECT
@s=@s+'Alter TABLE [表名] alter column '+Name+' '+TYPE_NAME(user_type_id)+case
when user_type_id in(34,35,36,48,52,56,58,59,60,61,62,98,99,104,122,127,189,241,256,241) then ''
when user_type_id in(106,108) then '('+rtrim(Precision)+','+rtrim(Scale)+')'
when user_type_id in (231,239) then case when max_length=-1 then '(max)' else '('+rtrim(max_length/2)+')' end
when max_length=-1 then '(Max)'
else '('+rtrim(max_length)+')' END+' not null;'
FROM sys.columns
WHERE is_nullable=0 AND object_id=object_id('表名')
EXEC(@s)
------其他解决方案-------------------- 以前的列里存在NULL的话
就更加烦了
先把之前的NULL update掉
楼主要淡定 慢慢搞 ------其他解决方案-------------------- 1.查询系统视图,sys.tables,sys.columns,sys.types得到表名,字段名,数据类型。
2.把1中的数据插入临时表,用游标遍历
3.在游标中拼动sql(alter table @tb_name alter @col_name @data_type not null)并执行 ------其他解决方案-------------------- 同上,大概如下
select 'alter table t alter column ' +name+' varchar(20) not null' ,* from syscolumns where OBJECT_ID('t')=id and isnullable=1 ------其他解决方案-------------------- 关联系统表,游标遍历。
不过对此种设计表示不敢恭维 ------其他解决方案-------------------- 查系统表
拼alter table...
alter column
语句
其他也没什么快捷的