Eu sei que posso já ser considerado da “velha guarda”.
Aprendi a programar com 11 anos, há mais anos do que muitos colegas meus têm de vida.
Se calhar é por isso gosto de ver coisas feitas à moda antiga. Uma delas é ver todos os declare no topo do script.
E de repente:
Mas assim apenas declaro mais abaixo e só aí vou usar o espaço da variável.
Mas quando fazes o declare não usas o espaço, só quando fazes o set.
Vamos ver se tenho razão?
Vamos declarar um nvarchar sem lhe dar valor e ver o que acontece?
declare @nvc nvarchar(255)
select Data_Lenght = datalength(@nvc)
set @nvc = '1'
select Data_Lenght = datalength(@nvc)

Pronto, é um varchar, pode ser isso…
Decerto não vai acontecer com um char.
declare @c char(255)
select Data_Lenght = datalength(@c)
set @c = '1'
select Data_Lenght = datalength(@c)

Afinal acontece.
E com mais alguns exemplos?
declare @i int
select Data_Lenght = datalength(@i)
set @i = 1
select Data_Lenght = datalength(@i)

declare @b bigint
select Data_Lenght = datalength(@b)
set @b = 1
select Data_Lenght = datalength(@b)

declare @d date
select Data_Lenght = datalength(@d)
set @d = GETDATE()
select Data_Lenght = datalength(@d)

declare @dt2 datetime2
select Data_Lenght = datalength(@dt2)
set @dt2 = GETDATE()
select Data_Lenght = datalength(@dt2)

Afinal…
“Mas quando fazes o declare não usas o espaço, só quando fazes o set.”
Certo.