2010-04-30 15 views

risposta

162

Sembra che tu chiami sp_executesql con un'istruzione VARCHAR, quando deve essere NVARCHAR.

ad es. Questo darà l'errore perché @SQL ha bisogno di essere NVARCHAR

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

Quindi:

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

Questa spiegazione è stata perfetta per me e ha risolto il mio problema. Grazie! – natur3

+0

Grazie! Aiutato molto! – cangosta

+0

nice man. Che funziona –

12

La soluzione è quella di porre N davanti sia lui che il tipo e la stringa SQL per indicare che è un stringa di caratteri a doppio byte:

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

Questa non è la soluzione qui - sarebbe ancora un errore come lo hai tu. La soluzione è di cambiare la variabile VARCHAR in NVADAR – AdaTheDev

+0

AdaTheDev, hai ragione, l'ho risolto ora –

Problemi correlati