Чому я отримую "Процедура передбачає параметр '@statement' типу 'ntext / nchar / nvarchar'." коли я намагаюся використовувати sp_executesql?


96

Чому я отримую цю помилку

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

коли я намагаюся використовувати sp_executesql?


1
Як ви намагаєтесь його виконати? У T-SQL? З програми? Ви передаєте необхідний параметр "@statement"?
Метт Гамільтон,

Відповіді:


216

Звучить, ви викликаєте sp_executesql із заявою VARCHAR, коли це має бути NVARCHAR.

Наприклад, це дасть помилку, оскільки @SQL повинен бути NVARCHAR

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

Так:

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

Це справді спрацьовує, але інша відповідь (від Даніеля Реншоу) НАБАГАТЕ корисніша, більшу частину часу. (оскільки йому не потрібне безглузде оголошення змінних)
Брондаль,

22

Рішення полягає в тому, щоб поставити N перед типом і рядком SQL, щоб вказати, що це двобайтовий рядок символів:

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

0

Я пропустив ще одну крихітну деталь: я забув дужки "(100)" за NVARCHAR.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.