将int列匹配为两个不同的数字

时间:2017-04-26 07:37:55

标签: sql sql-server azure-sql-database

我的MS SQL数据库中有一个标签表,我在其中指定了一个" TagType"作为smallint的列,它可以具有值0,1,2,3并且它们都具有不同的含义,并且显然只有一个,因为只有一列。现在我要求东西应该能够同时拥有两个TagType。

因此,例如,一个项目应该能够同时拥有2和3。因为我只有一个专栏,所以当然不可能。对我来说,引入新型喜欢" 4"并不难。并且这意味着2或3.但我真的不想重写我的所有查询,这些查询依赖于检查某些东西是2还是3我只是希望它们匹配。

我想要的是能够做一个查询" WHERE TagType = 3"如果列中的值是例如" 4"或" 23"它会匹配,我不确定如何,但也许有一些智能功能可以做到这一点?

1 个答案:

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