我有以下表结构。
**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的记录。我执行了以下代码。 从Table_A中选择[Category_Ids],其中A_Id = 1 这将返回具有单个列和单行的数据表,其值为“1,2,3” 假设上面的查询将数据填充到A_datatable中。我从以下代码中获取字符串。 String ids = A_datatable.column [0] [“Category_Ids”];
第二次查询: 现在,我必须从Table_B中获取值,其中C_Id在(1,2,3)中。我已执行以下代码并将字符串值传递给以下查询。 从Table_B中选择*,其中C_Id位于(ids) 当我执行上述查询获取错误时,无法将参数值从String转换为Int64。
答案 0 :(得分: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
Table_C
<强>记录强>
表-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
答案 1 :(得分:0)
您可以使用字符串拆分器功能,如此处所述的http://www.sqlservercentral.com/articles/Tally+Table/72993/
向下滚动到'CREATE FUNCTION'脚本并运行它以创建您的函数,然后您可以将逗号分隔的字符串拆分为在'where in'子句中使用
从表_B中选择* 其中C_Id(从dbo.DelimitedSplit8K选择项目(IDS,','))