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” 假设上述查询将数据填充到 A_datatable 中。我从以下代码中获取字符串。字符串 ids = A_datatable.column[0][“Category_Ids”];

第二个查询: 现在,我必须从 Table_B 中获取值,其中 C_Id 在 (1, 2, 3) 中。我已执行以下代码并将字符串值传递给以下查询。 Select * from Table_B where C_Id in (ids) 当我执行上述查询时出现错误,无法将参数值从字符串转换为 Int64。

4

2 回答 2

0

您实际上可以在单个查询中完成。

SELECT  b.*
FROM    Table_A a
        INNER JOIN Table_B b
            ON ',' + a.Category_IDs + ',' LIKE '%,' + CAST(C_ID AS VARCHAR(10)) + ',%'
WHERE   a.A_ID = 1

警告:此查询是索引杀手。您应该正确规范您的表格。

更新 1

建议的架构设计,

表_A

  • 援助
  • 类别_ID

表_C

  • 投标
  • C_ID
  • 姓名

记录

表_A

A_ID    Category_ID
1       1
1       2
1       3
2       4
2       5

表_B

B_Id    C_Id    Name
1       2       A
2       1       C
3       3       B
于 2013-05-20T14:08:44.703 回答
0

您可以使用此处描述的字符串拆分器功能http://www.sqlservercentral.com/articles/Tally+Table/72993/

向下滚动到“CREATE FUNCTION”脚本并运行它以创建您的函数,然后您可以拆分逗号分隔的字符串以在“where in”子句中使用

select * from Table_B
where C_Id in (select item from dbo.DelimitedSplit8K(IDS,','))

于 2013-05-20T15:15:39.537 回答