電話をかけたときに問題に直面sp_executesql
し、varchar パラメータを渡しました。
このエラーが発生しました:
プロシージャは、タイプ 'ntext/nchar/nvarchar' のパラメーター '@statement' を想定しています。
電話をかけたときに問題に直面sp_executesql
し、varchar パラメータを渡しました。
このエラーが発生しました:
プロシージャは、タイプ 'ntext/nchar/nvarchar' のパラメーター '@statement' を想定しています。
Psychic デバッガーは、varchar 型の変数に渡してSP_ExecuteSQL
いる (nvarchar にする) か、Unicode プレフィックスを使用していない文字列を持っていると言います。
例えば
Exec sp_executesql 'select * from something'
それを修正するには、次を使用します。
Exec sp_executesql N'select * from something'
N
文字列のプレフィックスに注意してください。
これを試して :
例 @SQL は NVARCHAR である必要があるため、これによりエラーが発生します。
以下にエラーを出します:
DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
だから:使用NVARCHAR(100)
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
これはexpectsの@statement
パラメータを意味します。sp_executesql
nvarchar
これは、パラメーターが nvarchar でなければならないという意味ではありません。
もちろん、パラメーターがないのに、なぜ sp_executesql を使用しているのでしょうか。
CREATE TABLE #foo (bar varchar(100) NOT NULL);
DECLARE @filter varchar(100) = 'bob';
EXEC sys.sp_executesql
N'SELECT * FROM #foo WHERE bar = @p1', --NVARCHAR because of N prefix
N'@p1 varchar(100)', --NVARCHAR because of N prefix
@filter --VARCHAR
DROP TABLE #foo