1

次のテーブル構造があります。

  **Table_A**
        A_Id(BigInt)    Category_Ids(varchar(50))
        1                        1,2,3
        2                         2,3

    **Table_B**
        B_Id(BigInt)    C_Id(Bigint)    Name(varchar(50))
        1                         2              A
        2                         1              C
        3                         3              B

最初のクエリ: このクエリでは、A_Id=1 のレコードを取得します。次のコードを実行しました。 Select [Category_Ids] from Table_A where A_Id=1 これにより、値が「1、2、3」の 1 つの列と 1 つの行を持つデータ テーブルが返されます。次のコードから文字列を取得します。文字列 ID = A_datatable.column[0][“Category_Ids”];

2 番目のクエリ: ここで、C_Id が (1, 2, 3) の Table_B から値をフェッチする必要があります。次のコードを実行し、文字列値を次のクエリに渡しました。 Select * from Table_B where C_Id in (ids) 上記のクエリを実行するとエラーが発生し、パラメーター値を文字列から Int64 に変換できませんでした。

4

2 に答える 2

0

ここで説明されているような文字列分割関数を使用できますhttp://www.sqlservercentral.com/articles/Tally+Table/72993/

「CREATE FUNCTION」スクリプトまでスクロールダウンし、それを実行して関数を作成します。次に、カンマ区切りの文字列を分割して「where in」句で使用できます

select * from Table_B
where C_Id in (dbo.DelimitedSplit8K(IDS,',') から項目を選択)

于 2013-05-20T15:15:39.537 に答える