- PR -

SQL Server 2005 の ストアド引数のnvarchar

1
投稿者投稿内容
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 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 側で修正する方法を模索しています。


以上、よろしくお願いします。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-10-09 13:25
こんにちは。

ストアドプロシージャで定義されている @UserName パラメータの型を varchar に変更することと @UserName がクエリに渡る前に nvarchar へと型変換することで暫時の対応ができるかもしれません。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2007-10-09 13:55
ue 様。

ご回答ありがとうございます。
ご提示の方法はやってみましたがダメでした。

半角カタカナのせいかも知れませんが、やはり正しく引数に渡されません。

SQL Server 側では対応できませんでしたので、後日アプリ側を修正し、現在は正しく動いております。

ありがとうございました。

それにしても、SQL Server 2000 では問題ないのに、SQL Server 2005 でダメでかつ対策がないのは困りますね。(2000 の環境のまま使用すればいいのでしょうが。その決定は私の範疇外。)
1

スキルアップ/キャリアアップ(JOB@IT)