无法使用IN关键字将参数值从String转换为SQL查询中的Int64

时间:2013-05-20 14:05:51

标签: c# sql sql-server string long-integer

我有以下表结构。

  **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。

2 个答案:

答案 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

  • A_ID
  • CATEGORY_ID

Table_C

  • B_ID
  • 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

答案 1 :(得分:0)

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

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

从表_B中选择* 其中C_Id(从dbo.DelimitedSplit8K选择项目(IDS,','))