2017-04-26 35 views
0

我在我的MS SQL数据库中有一个标记表,其中我已经指定了一个smallint的“TagType”列,它可以具有值0,1,2,3以及所有这些值有不同的含义,显然只有一个,因为只有一列。现在我有一个要求,即应该能够同时拥有两个TagTypes。在两个不同的数字上匹配int列

因此,例如一个项目应该能够同时具有2和3。而因为我只有一列,当然是不可能的。对于我来说,引入新类型“4”并不意味着2或3。但是我真的不想重写所有依赖于检查是否有2或3的查询我只是希望它们匹配。

我希望能够做的是有一个说“WHERE TagType = 3”的查询,如果列中的值是例如“4”或“23”它将匹配,我'米不知道如何,但也许有一些聪明的功能可以做到这一点?

+0

的一种方式将是您的整数列转换为VARCHAR,然后比较 – DevelopmentIsMyPassion

+0

显示出清晰的样本数据和所需的输出。 –

回答

0

SQL中同一类型的多个值的自然表示是继续使用一列,但使用多行。如果您要更改列的多重性,您经常会发现需要创建一个新表,然后允许您将多对一关系返回到原始表。

这将需要架构更改和现有代码的一些更新,但其他任何东西都将成为一个诡计。

所以,我们去的:

CREATE TABLE T1 (
    ID int not null primary key, 
    Col1 varchar(19) not null, 
    TagType smallint 
) 

到:

CREATE TABLE T1 (
    ID int not null primary key, 
    Col1 varchar(19) not null 
) 

CREATE TABLE T1Tags (
    T1ID int not null, 
    TagType smallint not null, 
    constraint PK_T1Tags PRIMARY KEY (T1ID,TagType), 
    constraint FK_T1Tags_T1 FOREIGN KEY (T1ID) 
    references T1(ID) 
) 
相关问题