2017-09-07 4 views
2

tempテーブルのカラムがnvarchar(max)であるかどうかを確認し、変換する場合はnvarchar(4000)にキャストしてsql_variant ?ここ は@audit_oldvalueがsql_variant型で、#tempTrigTから@itemはNVARCHAR(MAX)であるコードの一部です:tempテーブルからsql_variantへのSQLストアnvarchar(max)

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') 

答えて

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

ジャストにNVARCHAR(MAX)をキャストSQL_VARIANTにキャストする前のNVARCHAR(4000)。

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

あなたは私のコードにそれを修正することができますか?私は傾けるので。また、最初にそのNVARCHAR(MAX)がチェックされているかどうかを確認し、それ以外の場合はそのままキャストしますか? – aggicd

関連する問題