• 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.

    "I cant stress enough the importance of switching from a sequential files mindset to set-based thinking. After you make the switch, you can spend your time tuning and optimizing your queries instead of maintaining lengthy, poor-performing code."

    -- Itzik Ben-Gan 2001