2010-08-17 2 views
0

Это моя основная структура таблицы:проблема с хранимой процедурой?

alt text

Столбец экспертизы многие ко многим отношений с другой таблицей, которая имеет список доступных языков. Я хотел иметь сплющенную структуру, чтобы отображать все языки, на которых работает эксперт, поэтому я написал хранимую процедуру, которая строит те несколько экспертов, которые подходят для каждого пользователя.

Когда я вызвал этот sp из приложения wpf, он не показывает значения. Я попробовал «данные предварительного просмотра» из браузера объектов, который показывал только одну строку моей таблицы.

(Ожидаемый результат:

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


В качестве опоры:

Было бы намного лучше иметь таблицу Экспертиза, а затем сопоставить это поле с идентификаторами экспертизы. Так что в основном:

Таблица:

  • ExpertiseID
  • ExpertiseDescription

Затем в поле, которое вы используете для экспертизы, вы будете создавать таблицу мостовую и создать отношения новую таблицу экспертов.

+0

Согласовано, никогда не храните данные в delimtied srtring, если у вас есть много разных отношений, требующих трех таблиц. – HLGEM

+0

Кайл: тебя не достали. Elaborate pls :) – sarath

+0

PS: У меня есть таблица моста, если это то, о чем говоришь. Боюсь, что я не упомянул об этом раньше (но это очевидно из JOINS в моей sp). – 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

Смежные вопросы