0

asp.netページにチェックボックス付きのドロップダウンリストがあります。そのページで、複数/単一/すべての値をチェックします。

ここで、ドロップダウンリストから選択したすべての値をパラメーターとして SQL Server 2005 ストアド プロシージャに渡したいと考えています。

選択した値の配列を文字列として渡したい。各配列項目は「,」で区切られている

ストアド プロシージャでは、各値を 1 つずつ取得したいと考えています。(分割機能またはより良いオプションを使用していますか?)

選択した各パラメーターで挿入クエリを処理したい。

助けてください。

このストアドプロシージャを試しました。

CREATE PROCEDURE [dbo].[TEST_LIST] 
@ID_LIST VARCHAR(200)

AS
DECLARE @pos int、@nextpos int、@valuelen int

SELECT @pos = 0、@nextpos = 1

WHILE @nextpos > 0 BEGIN SELECT @nextpos = charindex(',', @ID_LIST, @pos + 1) SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos ELSE len(@ID_LIST) + 1 END - @pos - 1

  INSERT INTO TABLE 
    (ID)
     VALUES (convert(int, substring(@ID_LIST, @pos + 1, @valuelen)))
  SELECT @pos = @nextpos

終了 戻る 終了

しかし、これは正しいですか??

エラーが発生しました。

これに注意してください> 1つずつパラメータを取得したいので、そのたびにクエリを挿入します。

4

2 に答える 2

0

私の質問への回答として、以下に示すようにストアド プロシージャを変更してください。

CREATE  PROCEDURE SplitList
@List varchar(500) --list like 1,12,13 or john,12,bobe

はじめに

DECLARE @value varchar(10), @Pos int

SET @List = LTRIM(RTRIM(@List))+ ','
SET @Pos = CHARINDEX(',', @List, 1)

IF REPLACE(@List, ',', '') <> ''
BEGIN
    WHILE @Pos > 0
    BEGIN
        SET @value = LTRIM(RTRIM(LEFT(@List, @Pos - 1)))
        IF @value <> ''
        BEGIN
            -- put your code here 
        END
        SET @List = RIGHT(@List, LEN(@List) - @Pos)
        SET @Pos = CHARINDEX(',', @List, 1)

    END
END         

終わり

ありがとうございます。

于 2012-10-15T11:11:43.053 に答える
0

文字列 (これは「集計テーブル」とも呼ばれます) を c# で連結し、SQL で分割することができます。

「集計テーブル」を分割する方法に関する良い記事: http://www.sqlservercentral.com/articles/T-SQL/62867/

于 2012-10-12T12:04:37.690 に答える