「プロシージャはタイプ 'ntext / nchar / nvarchar'のパラメーター '@statement'を期待しています。」が表示されるのはなぜですか?sp_executesqlを使用しようとするとどうなりますか?


96

このエラーが発生するのはなぜですか

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

sp_executesqlを使用しようとするとどうなりますか?


1
どのように実行しようとしていますか?T-SQLでは?プログラムから?必要な「@statement」パラメータを渡していますか?
マットハミルトン

回答:


216

NVARCHARにする必要がある場合、VARCHARステートメントを使用してsp_executesqlを呼び出しているように見えます。

たとえば、@ 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

解決策は、タイプとSQL文字列の両方の前にNを付けて、2バイト文字列であることを示すことです。

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

0

私は別の小さな詳細を見逃していました。NVARCHARの後ろにある括弧((100))を忘れていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.