2010-08-17 10 views
0

이 내 기본 테이블 구조입니다 :저장 프로 시저에 문제가 있습니까?

alt text

전문 지식의 열 사용 가능한 언어 목록이 다른 테이블과 많은 관계로 많은입니다. 개인 전문 지식이있는 모든 언어를 표시 할 수 있도록 병합 된 구조를 갖고 싶었 기 때문에 각 사용자에게 적합하도록 여러 가지 숙련도를 줄이는 저장 프로 시저를 작성했습니다.

내 wpf 응용 프로그램에서이 sp를 호출했을 때 값이 표시되지 않습니다. 내 테이블의 한 행만 표시 한 객체 브라우저에서 '미리보기 데이터'를 시도했습니다.

(예상 결과 :

alt text

내 접근 방식의 문제점은 무엇

내 SP :?

create procedure myView as 
Begin 
DECLARE @count INT,@finCount INT,@result varchar(50) 
SET @result =' ' 
SET @count = 1 
SELECT @finCount=COUNT(*) FROM usersProfile 
WHILE (@count <= @finCount) 
BEGIN 
    SELECT @[email protected]+langName+',' 
    FROM expertises 
    INNER JOIN ED_UPD_MERGE on expertises.id=ED_UPD_MERGE.idfrmED 
    INNER JOIN usersprofile on ED_UPD_MERGE.idfrmUPD=usersprofile.expertiseid 
    WHERE usersprofile.id [email protected] 

    SELECT usersProfile.id,usersProfile.fullname,usersProfile.screename ,usersProfile.age ,usersProfile.address ,usersProfile.emailid1 ,usersProfile.emailid2 ,usersProfile.isActive ,usersProfile.entryCreated ,usersProfile.entryModified ,usersProfile.experience ,roles.rolesName,@result as Expertise 
    FROM usersProfile   
    JOIN roles 
    ON usersProfile.roleid =roles.id 
    WHERE usersprofile.id [email protected] 
    SET @result= '' 
    SET @count = (@count + 1) 
    END 
End 

답변

1

당신이 WPF 코드를 게시 할 수


옆줄로 :

테이블 전문 지식을 가진 다음 해당 필드를 전문 기술 ID에 매핑하는 것이 훨씬 더 좋은 설계입니다. 그래서 기본적으로 :

테이블 :

  • ExpertiseID
  • ExpertiseDescription

그런 다음 현재 전문을 위해 사용하고 자신의 분야에서, 당신은 브리지 테이블을 생성하고 관계를 만듭니다 새로운 전문 기술 표.

+0

3 개의 테이블이 필요한 다 대다 관계가있는 경우 데이터를 구분 된 srtring에 저장하지 마십시오. – HLGEM

+0

카일 : 당신을 못 가져 왔습니다. 정교한 pls :) – sarath

+0

추신 : 내가 무슨 얘기를하는 경우 그 다리가 테이블이 있습니다. 나는 그것이 이전에 abt를 언급하지 않았다는 것을 두려워한다. (그러나 나의 sp의 JOINS로부터 명백하다.) – sarath

0

langName 열에 NULL 값이 허용됩니까? 적어도 하나의 NULL을 @result 문자열에 연결하면 NULL 결과를 얻게됩니다. NULLS가 langName 열에 허용하고 가정하는 경우 당신은 당신이 바꿀 수 langName에 행을 무시해야합니다 :

SELECT @[email protected]+langName+',' 

SELECT @[email protected]+ ISNULL(langName+',', '') 

에이 @result의 마지막 경우에 빈 문자열을 추가합니다 langName은 null입니다. 그렇지 않으면 langName이 문자열에 추가됩니다.

+0

NOpe 그것은 NULL을 허용하지 않으며 내 문제가 보이지 않는 :) – sarath

관련 문제