这是我的主要表结构:
专业知识列与另一个具有可用语言列表的表有多对多的关系。我希望有一个扁平的结构来显示一个人专业知识的所有语言,所以我写了一个存储过程,将那些多个专业知识字符串化以适合每个用户。
当我从我的wpf应用程序调用此sp时,它没有显示值。我尝试了对象浏览器中的“预览数据”,它只显示了我的一行表。
(预期结果:
我的方法有什么问题?
我的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 @result=@result+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 =@count
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 =@count
SET @result= ''
SET @count = (@count + 1)
END
End
答案 0 :(得分:1)
你能发布WPF代码吗?
作为旁注:
拥有表专业知识,然后将该字段映射到专业知识ID,这将是一个更好的设计。所以基本上:
表:
然后,在您正在使用专业知识的领域中,您将创建一个桥接表并创建一个新专业知识表的关系。
答案 1 :(得分:0)
langName
列是否允许NULL值?如果将至少一个NULL连接到@result
字符串,则会得到NULL结果。如果langName
列中允许使用NULLS,并假设您要忽略langName
行,则可以更改:
SELECT @result=@result+langName+','
到
SELECT @result=@result+ ISNULL(langName+',', '')
如果langName
为空,这将在@result的末尾添加一个空字符串;否则,langName将被附加到字符串。