C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: int型にカンマ区切りのパラメータを渡したい


(過去ログ 99 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■59292 / inTopicNo.1)  int型にカンマ区切りのパラメータを渡したい
  
□投稿者/ sato (1回)-(2011/05/20(Fri) 15:50:34)

分類:[データベース全般] 

SQL Server 2008のストアドで質問があります。
パラメータとして
カンマ区切り(例 5,10,20)を渡して
その結果を取得したいのですが
型エラーで上手くいきません。
この場合、どのような手段があるのでしょうか?
よろしくお願いいたします。


ALTER procedure [dbo].[p_test]
(
@Id nvarchar(max) = ''
)
AS

SELECT Id FROM FileMaster

WHERE Id in (@Id)

引用返信 編集キー/
■59296 / inTopicNo.2)  Re[1]: int型にカンマ区切りのパラメータを渡したい
□投稿者/ 魔界の仮面弁士 (2175回)-(2011/05/20(Fri) 16:40:47)
No59292 (sato さん) に返信
> カンマ区切り(例 5,10,20)を渡して
> その結果を取得したいのですが

テーブル値パラメータで渡すのは駄目でしょうか。
http://msdn.microsoft.com/ja-jp/library/bb510489.aspx
http://blogs.wankuma.com/mura/archive/0001/01/01/116485.aspx


テーブル型で渡すのでは無く、文字列として『EXECUTE dbo.p_test '5,10,20'』のように
渡したいのであれば、動的SQL で処理する事になるかと思います。


CREATE PROCEDURE [dbo].[p_test]
(
  @idList nvarchar(max) = null
) AS
BEGIN
  DECLARE @SQL AS nvarchar(max)
  IF @idList IS NULL OR @idList = ''
  BEGIN
       SET @SQL = 'SELECT * FROM FileMaster WHERE 1 = 0'
  END
  ELSE
  BEGIN
    SET @SQL = 'SELECT * FROM FileMaster WHERE Id IN (' + @idList + ')'
  END

  EXEC sp_executesql @SQL 
END

引用返信 編集キー/
■59307 / inTopicNo.3)  Re[2]: int型にカンマ区切りのパラメータを渡したい
□投稿者/ ちゃっぴ (76回)-(2011/05/21(Sat) 10:03:20)
ちゃっぴ さんの Web サイト
No59296 (魔界の仮面弁士 さん) に返信

それ SQL injection できちゃいますよね。
最大要素数決めておいて要素ごとに parameter 定義するべきだと思いますけど。
引用返信 編集キー/
■59318 / inTopicNo.4)  Re[3]: int型にカンマ区切りのパラメータを渡したい
□投稿者/ 魔界の仮面弁士 (2179回)-(2011/05/21(Sat) 14:36:12)
No59307 (ちゃっぴ さん) に返信
> それ SQL injection できちゃいますよね。
それは第2案として提示した、動的SQLの方ですよね。

最初に指定したテーブル値パラメータを使う方法であれば、
int 値に限定して渡せるかと思います。
(当方には SQL 2005 しか無いため未検証)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -