2017-04-26 57 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) 
) 
相關問題