5

ユーザーがさまざまなタイプを表す値を選択し、それぞれが ID で識別されるクエリ ページに取り組んでいます。問題は、WHERE IN メソッドを使用してデータベースからこれらの ID を選択することです。

これは私のSQL文です

SELECT M.REG_NO, T.TYPE_ID 
    FROM MAIN AS M 
        INNER JOIN CLASSIFICATION AS C 
            ON M.REG_NO = C.REG_NO
        INNER JOIN TYPE AS T 
            ON T.TYPE_ID = C.TYPE_ID
    WHERE T.TYPE_ID IN (@Types)

単一の値に対して機能します。46、ただし、値が括弧内にある場合は除きます。(46) または ('46')、IN の場合の方法。

テーブルアダプターにアクセスして値を取得するメソッドを自動生成するビジュアルスタジオを使用しているため、SQLを介してこれを行う必要があると思います。

文字列を渡しています。Types = "46,267,2010" を、SQL ステートメントの @Types に文字列を渡すアダプタ メソッドに渡します。

どんな助けでも素晴らしいでしょう。ありがとう!

4

3 に答える 3

10

これはかなり一般的な問題です。TSQL がまだ対処していない理由はわかりません。とにかく、私が見つけた最善の解決策は、変数をテーブルに変換することです。その後、IN() を問題なく使用できます。

関数から始めます:

CREATE Function [dbo].[ParseStringList]  (@StringArray nvarchar(max) )  
Returns @tbl_string Table  (ParsedString nvarchar(max))  As  

BEGIN 

DECLARE @end Int,
        @start Int

SET @stringArray =  @StringArray + ',' 
SET @start=1
SET @end=1

WHILE @end<Len(@StringArray)
    BEGIN
        SET @end = CharIndex(',', @StringArray, @end)
        INSERT INTO @tbl_string 
            SELECT
                Substring(@StringArray, @start, @end-@start)

        SET @start=@end+1
        SET @end = @end+1
    END

RETURN
END

そして、機能を使用するには...

SELECT * 
FROM table
WHERE SomeFieldValue In (Select ParsedString From dbo.ParseStringList(@Types))
于 2011-08-04T16:53:13.487 に答える
5

これは、一連の値をコンマで区切る必要があるためです。お気に入り

WHERE
T.TYPE_ID IN ('46', '45', '44');

SQL Server または Oracle、MySQL を使用していますか?

次のような複数の値で構成される文字列がある場合

T.TYPE_ID IN ('46,45,44');

区切り文字を使用して文字列を分解する関数が必要になる場合があります (分割または DBMS に応じて呼び出されるもの)。

于 2011-08-04T16:45:31.030 に答える