存储过程的问题?

时间:2010-08-17 06:21:27

标签: wpf vb.net tsql

这是我的主要表结构:

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 @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

2 个答案:

答案 0 :(得分:1)

你能发布WPF代码吗?


作为旁注:

拥有表专业知识,然后将该字段映射到专业知识ID,这将是一个更好的设计。所以基本上:

表:

  • ExpertiseID
  • ExpertiseDescription

然后,在您正在使用专业知识的领域中,您将创建一个桥接表并创建一个新专业知识表的关系。

答案 1 :(得分:0)

langName列是否允许NULL值?如果将至少一个NULL连接到@result字符串,则会得到NULL结果。如果langName列中允许使用NULLS,并假设您要忽略langName行,则可以更改:

SELECT @result=@result+langName+','

SELECT @result=@result+ ISNULL(langName+',', '')

如果langName为空,这将在@result的末尾添加一个空字符串;否则,langName将被附加到字符串。