2010-12-20 76 views
0

我使用一個使用MS-SQL數據庫的封閉源商業應用程序。我經常需要爲了各種目的而自己查詢這個數據庫。這意味着表格和數據庫設計是固定的,我根本無法做任何事情。我只需要忍受它。現在,我有以下佈局(抽象,不抹黑軟件/數據庫設計師)兩個表在MS-SQL中解析逗號分隔的值(無csv等)

t1: ID (int), att1(varchar), att2(varchar), .... attx(varchar) 

t2: ID (int), t1_ids(varchar) 

現在這個t1_ids的內容是(戰慄)逗號分隔T1 ID的列表。 (例如12,456,43,675,54)。我想要做的是(你猜對了)加入這兩張桌子。

幸運的是,這些都是非常小的表格,我根本不在乎複雜性(可能是O(n^m)就我而言)。

理想情況下,我想提出一個觀點,加入這兩個表。我沒有任何插入或更新的要求,只是爲了選擇語句。什麼是最簡單和最清晰的(在可維護性方面)如何做到這一點?

+1

可能重複[T-SQL:與字符串連接相反 - 如何將字符串拆分爲多個記錄](http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how - 分裂字符串到多個記錄) – Lucero 2010-12-20 11:41:41

回答

1

爲了得到第一個和最後一個也使用此:

select * 
from t1 
    join t2 on '%,' + t1.ID + ',%' like ',' + T2.t1_ids + ',' 

如果T2.t1_ids開始或結尾不要緊。有效值用逗號括起來。

+0

與賈尼相同的評論,這不適用於第一個和最後一個項目,因爲他們沒有雙方的逗號 – Martijn 2010-12-20 12:23:36

+0

@Martijn陷阱。修復了我的代碼。我真的在過去使用過這種模式。 – 2010-12-20 12:54:32

0

編輯:我意識到張貼這個答案後,PARSENAME函數只能返回解析字符串的一部分,所以它不是一個有用的,因爲我認爲它會在你的情況。

SO搜索的替代解決方案,我碰到了一個有趣的回答了這個問題:Split String in SQL

如果你可以添加觸發器到您的數據庫,那麼你可以致電INSERTUPDATEDELETE分割字符串保持另一個表該ID以行的形式分隔。然後,您可以使用該表創建視圖。

我知道你說你不介意查詢的速度,但至少你沒有在每次查詢數據時都解析所有的字符串。