Salve,
"l'errore", concettualmente, e' il "tipo di dato", che, in SQL Server, che NON E' quello che tu pensi in effetti sia... NON E' un tipo di "carattere", ma "leggermente" diverso, e gli si applicano regole diverse dal tipico (n)varchar...
per capirci, creando una tabella (non metto il codice di creazione in quanto il parser del forum lo identifica come possibile attacco)
tabella dbo.tNum ( valoreI int );
tabella dbo.tText ( valoreT text );
popolate come segue:
INSERT INTO dbo.tText
VALUES ( '1' ), ( 'A' ), ( '2' ), ( 'B' );
INSERT INTO dbo.tNum
VALUES ( 1 ), ( 2 ), ( 3 );
puoi verificare i seguenti test:
GO
PRINT 'errore 1';
GO
SELECT *
FROM [dbo].[tNum] n
JOIN [dbo].[tText] t ON n.[valoreI] = t.[valoreT];
GO
PRINT 'errore 2';
GO
SELECT *
FROM [dbo].[tNum] n
JOIN [dbo].[tText] t ON CONVERT( varchar(10), n.[valoreI] ) = t.[valoreT];
GO
PRINT 'valido 3';
GO
SELECT *
FROM [dbo].[tNum] n
JOIN [dbo].[tText] t ON CONVERT( varchar(10), n.[valoreI] ) = CONVERT( varchar(8000), t.[valoreT] );
--<-----------------
errore 1
Msg 206, Level 16, State 2, Line 20
Operand type clash: text is incompatible with int
errore 2
Msg 402, Level 16, State 1, Line 28
The data types varchar and text are incompatible in the equal to operator.
valido 3
valoreI valoreT
----------- -------------------
1 1
2 2
quindi il cast implicito non e' sufficiente, e vanno castati entrambi al tipo di dato (n)varchar...
poi, ci sarebbe anche da vedere se in effetti il tipo di dato
text sia in effetti necessario per le tue necessita'...
oramai, SQL Server consente nei tradizionali (n)varchar di definire "l'allocazione" come MAX,
DECLARE @dato varchar(MAX);
che permette l'allocazione potenziale di 2GB di dati, e penso possa essere piu' che sufficiente , abbandonando i "vecchi" tipi di dato
image e
text...
salutoni romagnoli
--
Andrea