2010-12-20 45 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以行的形式分隔。然后,您可以使用该表创建视图。

我知道你说你不介意查询的速度,但至少你没有在每次查询数据时都解析所有的字符串。