Mais cuidados a ter com select into para temporárias

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 é? 🙂

Share

You may also like...

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *