2017-09-07 1 views
2

Comment puis-je vérifier si une colonne dans une table temporaire est nvarchar (max) et si oui, la convertir ou la convertir en nvarchar (4000) afin de la stocker dans sql_variant ? Voici la partie du code où @audit_oldvalue est sql_variant et @item de #tempTrigT est nvarchar (max):SQL Store nvarchar (max) de la table temporaire à sql_variant

set @sql = 'select @audit_oldvalue=[' [email protected] +'] from #tempTrigT'; 
EXEC SP_EXECUTESQL @sql,N'@audit_oldvalue sql_variant OUTPUT',@audit_oldvalue OUTPUT 

#tempTrigT:

Select * into #tempTrigT from (select * from deleted where @Action in ('U','D')) A UNION (select * from inserted where @Action ='I') 

Répondre

2
set @sql = 'set @audit_oldvalue=(select cast([' [email protected] +'] as NVARCHAR(4000)) from #tempTrigT)'; 
EXEC SP_EXECUTESQL @sql,N'@audit_oldvalue sql_variant OUTPUT',@audit_oldvalue OUTPUT 
0

juste jeté le NVARCHAR (MAX) à NVARCHAR (4000) avant la conversion en SQL_VARIANT.

DECLARE @String NVARCHAR(MAX) = N'test string'; 

SELECT CAST(@String AS SQL_VARIANT);       --fail 
SELECT CAST(CAST(@String AS NVARCHAR(4000)) AS SQL_VARIANT); -- success 
+0

Pouvez-vous modifier à mon code? parce que je ne peux pas. Et est-il également possible de vérifier d'abord si son NVARCHAR (MAX) et ensuite faire le casting sinon le garder tel quel? – aggicd