Type d'opérage Clash
J'ai une longue procédure stockée et lorsque j'exécute la procédure j'obtiens l'erreur suivante:
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
Afin de dépanner j'ai imprimé satetement où est le problème et le code est:
SELECT 'Name' ,
7 ,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr([Name])), 'X', 'x')
ELSE CONVERT(VARCHAR(4000), [Name])
END , 'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
Alors, Quand j'exécute l'instruction ci-dessus, il est givng moi l'erreur:
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
Le type de données de Nom est de type Varchar(MAX) dans la réf.dbo.datatables table
Comment résoudre ce problème?
Réponse:
C'est ce que j'ai fait pour travailler:
SELECT 'Name',
7,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr(CONVERT(VARBINARY,[Name]))),'X','x')
ELSE CONVERT(VARCHAR(4000),[Name])
END,
'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
source d'informationauteur peter
Vous devez vous connecter pour publier un commentaire.
L'erreur est correcte, vous ne pouvez pas implicitement ou explicitement) en fonte d'un
VARCHAR(MAX)
àsql_variant
. SiName
est unVARCHAR(MAX)
vous aurez besoin pour le convertir en un type compatible (commeVARCHAR(8000)
pour la transmettre en tant que paramètre àsys.fn_sqlvarbasetostr()
voir msdn:
Si vous avez besoin de la fonctionnalité de
sys.fn_sqlvarbasetostr()
et peut pas convertir votre col sans perdre de données, vous devrez peut-être rouler votre propre version de cette fonction. CLR serait un bon pari.