SQL Server 2008从逗号分隔值中选择列

时间:2016-01-22 12:31:09

标签: sql sql-server sql-server-2008

表1:

Id | Name
1  | Example1
2  | Example2

表2:

Id  | Table1_IDs
1   | 1,2
2   | 2

我想使用table1_IDs从table2中选择table1,如:

select * 
from table1
where id in (select t.table1_IDs from table2 t)

2 个答案:

答案 0 :(得分:0)

您可以构建查询字符串end,然后使用sp_executesql存储过程来运行它。这样的事情(未经测试)

declare @ids varchar(2000)
select @ids = coalesce(@ids + ',', '') +  convert(varchar(100), table1_IDs)
from table2

declare @query nvarchar(2000) = 'select * from table1 where id in (' + @ids + ')'
execute sp_executesql @query

但是,使用昏迷分离值并不是一个好主意,因为它会降低性能。尝试重构你的表格。

答案 1 :(得分:0)

  

具有相同结构的任何其他选项?

select * from table1 ta join
    (
    SELECT id,  
         LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs
          from  (

    SELECT id,CAST('<XMLRoot><RowData>' + REPLACE(value,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
    FROM   table2

)  t 
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)) b on b.id=ta.id

将table table2逗号删除为行,并与Join中的Table1一起使用。