Dlaczego otrzymuję komunikat „Procedura oczekuje parametru„ @statement ”typu„ ntext / nchar / nvarchar ”.” kiedy próbuję użyć sp_executesql?


96

Dlaczego otrzymuję ten błąd

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

kiedy próbuję użyć sp_executesql?


1
Jak próbujesz to wykonać? W T-SQL? Z programu? Czy przekazujesz wymagany parametr „@statement”?
Matt Hamilton,

Odpowiedzi:


217

Wygląda na to, że dzwonisz do sp_executesql z instrukcją VARCHAR, kiedy musi to być NVARCHAR.

np. spowoduje to błąd, ponieważ @SQL musi być NVARCHAR

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

Więc:

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

To działa, ale inna odpowiedź (od Daniela Renshawa) jest O WIELE bardziej użyteczna przez większość czasu. (ponieważ nie wymaga bezcelowej deklaracji zmiennej)
Brondahl

22

Rozwiązaniem jest umieszczenie N przed typem i ciągiem SQL, aby wskazać, że jest to dwubajtowy ciąg znaków:

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

0

Pominąłem kolejny drobny szczegół: zapomniałem nawiasów „(100)” za NVARCHAR.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.