You could do something like this:
USE tempdb;
DECLARE @source_table varchar(100)='sys.all_columns',--Source Table
@dest_table varchar(100)='new_table',--destination table (created by SELECT INTO)
@column varchar(100)='is_column_set',--column to swich to NOT NULL
@sql_prep varchar(1000),
@insert_sql varchar(1000),
@alter_sql varchar(1000),
@data_type varchar(100);
SET @sql_prep='IF OBJECT_ID('''+DB_NAME()+'..'+@dest_table+''')'+' IS NOT NULL DROP TABLE '+@dest_table;
EXEC(@sql_prep);
SET @insert_sql='SELECT * INTO '+@dest_table+' FROM '+@source_table;
EXEC(@insert_sql);
SELECT @data_type=DATA_TYPE+
CASE
WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ''
ELSE '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar(5))+')'
END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=@dest_table
AND COLUMN_NAME=@column;
SET @alter_sql='ALTER TABLE '+@dest_table+' ALTER COLUMN '+@column+' '+@data_type+' NOT NULL'
EXEC(@alter_sql);
You would supply the values for @source_table, @dest_table & @column. Obviously this script, as is, will only work for one column but you could easily update it to handle more.
-- Itzik Ben-Gan 2001