Почему я получаю сообщение «Процедура ожидает параметр '@statement' типа 'ntext / nchar / nvarchar'». когда я пытаюсь использовать sp_executesql?


96

Почему я получаю эту ошибку

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

когда я пытаюсь использовать sp_executesql?


1
Как вы пытаетесь его выполнить? В T-SQL? Из программы? Вы передаете обязательный параметр «@statement»?
Мэтт Гамильтон,

Ответы:


217

Похоже, вы вызываете 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

Это действительно работает, но другой ответ (от Дэниела Реншоу) в большинстве случаев более полезен. (поскольку ему не нужно бессмысленное объявление переменной)
Brondahl

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.