以下のように表示されます。
- (エラー)
- 214 「プロシージャでは型 'ntext/nchar/nvarchar' のパラメーター '@statement' を想定しています。」
原因
- sp_executesqlで実行する時のSQL文やパラメータの文字コードがUnicodeでない
エラーとなる例
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE @NAME varchar(10); DECLARE @SQL varchar(max); SET @SQL = 'SELECT @PNAME = NAME FROM t_test '; DECLARE @VAL varchar(max); SET @VAL = '@PNAME varchar(10) OUTPUT'; EXECUTE sp_executesql @SQL, @VAL, @PNAME = @NAME OUTPUT; SELECT @NAME; |
- (結果)
- プロシージャでは型 'ntext/nchar/nvarchar' のパラメーター '@statement' を想定しています。
対処法
- sp_executesqlに指定するSQLと変数の文字コードはUnicodeである必要があります。
なので、SQL文の先頭にはNを、変数はnchar型またはnvarchar型にすればOKです。
エラー解消
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE @NAME nvarchar(10); DECLARE @SQL nvarchar(max); SET @SQL = N'SELECT @PNAME = NAME FROM t_test '; DECLARE @VAL nvarchar(max); SET @VAL = '@PNAME nvarchar(10) OUTPUT'; EXECUTE sp_executesql @SQL, @VAL, @PNAME = @NAME OUTPUT; SELECT @NAME; |
SQL文字列の先頭にNを指定、型をvarchar⇒nvarcharにしています。
備考
- sp_executesql は、動的に作成したSQLを実行するためのコマンドです。