2011-05-04 4 views
2

두 개의 열이있는 간단한 sql 테이블이 있습니다. 이름과 ID는 모두 varchar (10)입니다. 이제 나는 'Test', '1,2,3'와 같은 테이블에 값을 갖는다. 직원의 전체 세부 정보를 얻을 수있는 테이블이 하나 있지만 tblEmployee의 Ids 열은 int입니다. SQL 다음에 오류가 발생합니다.varchar를 int로 변환 SQl server 2005

select * from tblEmployee 여기서 id는 (tblNameId에서 Select Ids는 name = 'Test');

오류가 1,2,3을 int로 변환 할 수 없습니다. 그들의 가치를 int 또는 다른 해결 방법으로 변환하는 방법입니까?

감사합니다.

답변

1

텍스트 (이 사이트에서 적응 : http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx)

CREATE FUNCTION dbo.Split(@String varchar(8000))  
returns @temptable TABLE (items int)  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(',',@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(CONVERT(INT, @slice))  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return  
end 
다음

Select * from tblEmployee where Ids in dbo.Split(Select Ids from tblNameId where name='Test'); 

분할하는 다음과 같은 기능을 사용하여 실제로의 쉼표로 구분 된 목록을 가지고있는 것처럼

1

가 보이는에게 정수. 클리너 디자인은 각 직원 ID에 대해 하나의 행과 함께 tblNameId 테이블을 정상화

select * 
from tblEmployee e 
join tblNameId ni 
on  ',' + ni.Ids + ',' like '%,' + cast(e.Ids as varchar(12)) + ',%' 

:처럼 당신은 조회 할 수있다.

+0

데이터에 따라 매우 느릴 수 있습니다. – ariel