- - PR -
SQL Server 2005 の ストアド引数のnvarchar
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-04 21:15
お世話になります。
SQL Server 2005 のストアドで nvarchar の引数に、N をつけずに引数を指定して実行時すると、正しく動作しません。 -- ストアド ---- ALTER PROCEDURE [dbo].[Test] @UserName NVARCHAR(20) AS BEGIN SELECT ID FROM User WHERE UserName = @UserName END ---------------- --- ストアド実行(正常)---- EXEC [dbo].[Test] N'テスト タロウ' ---------------------------- --- ストアド実行(失敗)---- EXEC [dbo].[Test] 'テスト タロウ' ---------------------------- N をつけなくても成功する方法はないでしょうか? データベースのプロパティの変更などでもかまいません。 なぜ、このような質問をしているか、説明させていただきます。 .NET Framework1.0 で動作するアプリがあり、SqlSelectCommand でストアド「dbo.Test」を実行しています。 しかし、パラメータの指定で @UserName の型が「System.Data.SqlDbType.VarChar, 20」となっています。 this.sqlSelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@UserName", System.Data.SqlDbType.VarChar, 20)); NVarChar を指定すればうまくいくと思うのですが。アプリを修正する環境がすぐにないので、SQL Server 側で修正する方法を模索しています。 以上、よろしくお願いします。 |
|
投稿日時: 2007-10-09 13:25
こんにちは。
ストアドプロシージャで定義されている @UserName パラメータの型を varchar に変更することと @UserName がクエリに渡る前に nvarchar へと型変換することで暫時の対応ができるかもしれません。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 |
|
投稿日時: 2007-10-09 13:55
ue 様。
ご回答ありがとうございます。 ご提示の方法はやってみましたがダメでした。 半角カタカナのせいかも知れませんが、やはり正しく引数に渡されません。 SQL Server 側では対応できませんでしたので、後日アプリ側を修正し、現在は正しく動いております。 ありがとうございました。 それにしても、SQL Server 2000 では問題ないのに、SQL Server 2005 でダメでかつ対策がないのは困りますね。(2000 の環境のまま使用すればいいのでしょうが。その決定は私の範疇外。) |
1