web-dev-qa-db-ja.com

「プロシージャでは、タイプ「ntext / nchar / nvarchar」のパラメータ「@statement」が必要です」というメッセージが表示されるのはなぜですか。 sp_executesqlを使用しようとすると?

このエラーが発生する理由

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

sp_executesqlを使用しようとすると?

86
Manoj Wadhwani

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
202
AdaTheDev

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

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