2010-04-30 14 views

Répondre

162

On dirait que vous appelez sp_executesql avec une instruction VARCHAR, alors qu'elle doit être NVARCHAR.

par exemple. Cela donnera l'erreur car @SQL doit être NVARCHAR

DECLARE @SQL VARCHAR(100) 
SET @SQL = 'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL 

Alors:

DECLARE @SQL NVARCHAR(100) 
SET @SQL = 'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL 
+0

Cette explication était parfaite pour moi et a résolu mon problème. Merci! – natur3

+0

Merci! A beaucoup aidé! – cangosta

+0

gentil homme .s'il travaille –

12

La solution est de mettre un N devant tant qu'il type et la chaîne SQL pour indiquer qu'il est chaîne de caractères à deux octets:

DECLARE @SQL NVARCHAR(100) 
SET @SQL = N'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL 
+0

Ce n'est pas la solution ici - ce serait encore erreur que vous l'avez. La solution est de changer la variable VARCHAR en NVARCHAR – AdaTheDev

+0

AdaTheDev, vous avez raison, j'ai corrigé cela maintenant –