在单元格中拆分字符串并创建多行

时间:2014-12-30 13:52:52

标签: sql-server tsql

我的膝盖上有一个旧的数据库,而且模型不是很好。在过于复杂的软件应用程序中处理了糟糕的建模,但我需要更紧密地处理数据库。

数据库的建模方式如下:

,而不是了解外键和关系的工作原理
  • Table1包含ID_1Value
  • Table2包含ID_2AnotherValueID_1s

其中ID_1是INT,ID_1s是包含以管道分隔的ID_1引用字符串的varchar(即' 1 | 4 | 5',表示它被引用到table1.ID_1为1,4或5的行

现在,我需要加入这两个表而不是通过它们解析应用程序并以编程方式链接它们。与此同时,我无法修改db-model本身,因为它会破坏应用程序。

基本上,我需要模仿与我所拥有的多对多关系。

有没有人知道这样做有点可靠?

(将来,有一个计划基本上重新设计数据库并使用视图作为应用程序的抽象。)

2 个答案:

答案 0 :(得分:1)

虽然它不会是最快的查询,但您可以应用与此处概述的相同的想法:Parameterize an SQL IN clause

SELECT Table1.Value
FROM Table1
INNER JOIN Table2
    ON '|' + Table2.ID_1s + '|' LIKE '%|' + CAST(Table1.ID_1 AS varchar(20)) + '|%'

-- Add any other conditions in a WHERE clause.

答案 1 :(得分:0)

我认为你可以使用这样的东西

SELECT 
  Table1.*,
  Table2.*
FROM
  Table1
  INNER JOIN Table2
    ON PATINDEX('%|'+LTRIM(RTRIM(CONVERT(NVARCHAR(100), Table1.ID_1)))+'|%', Table2.ID_1s) <> 0