Se bem se lembram, há uns dias fiz aqui um post a relembrar termos cuidado quando fazemos um select into para uma temporária.
Este é outro caso em que as coisas podem não acabar como esperámos.
Da última vez mostrei como num select into o coluna fica nullable se a tabela fonte tem a coluna nullable.
Nesta demo mostro o contrário, como partimos de uma coluna que não aceita nulls para uma coluna que aceita.
Parece difícil, mas é mesmo tão simples…
Vamos criar uma tabela com alguns campos mais do que da outra vez.
create table nulltest02 ( int1 int not null , int2 int , var1 varchar(255) not null , var2 varchar(255) , bit1 bit not null , bit2 bit , char1 char(255) not null , char2 char(255) ) insert into nulltest02 values ( 1, 1, '0123456789', '0123456789', 1, 1, '0123456789', '0123456789') , ( 1, null, '0123456789', null, 1, null, '0123456789', null) , ( 2, 2, '01234567890123456789', '01234567890123456789', 2, 2, '01234567890123456789', '01234567890123456789') , ( 2, null, '0123456789', null, 2, null, '0123456789', null) , ( 3, 3, '012345678901234567890123456789', '012345678901234567890123456789', 3, 3, '012345678901234567890123456789', '012345678901234567890123456789') , ( 3, null, '012345678901234567890123456789', null, 3, null, '012345678901234567890123456789', null) select * from nulltest02

Fazemos o mesmo que da outra vez… select into.
select * into #null_test_temp_02 from nulltest02 where int2 is not null and var2 is not null and bit2 is not null and char2 is not null exec tempdb..sp_help '#null_test_temp_02'

Tudo bem até agora, já vimos isto antes.
Mas… e se por alguma razão fizermos um cast, masmo que seja um cast exactamente para o mesmo tipo?
select int1 = cast(int1 as int) , int2 = cast(int2 as int) , var1 = cast(var1 as varchar(150)) , var2 = cast(var2 as varchar(150)) , bit1 = cast(bit1 as bit) , bit2 = cast(bit2 as bit) , char1 = cast(char1 as char(150)) , char2 = cast(char2 as char(150)) into #null_test_temp_03 from nulltest02 where int2 is not null and var2 is not null and bit2 is not null and char2 is not null exec tempdb..sp_help '#null_test_temp_03'

Pois é… todas as colunas agora aceitam nulls.
Mas isto é uma coisa que todos já sabíamos, não é? 🙂