我有一个表tbl_Info:

InfoId
Text
PrivacyTypeId
UserName
TypeId
IsInfo
InfoItemId

数据示例:
1|Some text...|1|userX|1|False|NULL
2|New job created|1|system|3|True|765
3|Image commented|1|system|4|True|457

在我的应用程序中,我从该表中获取所有值,并将它们显示为列表。

应用程序用户可以单击每个项目,并且应该将它们重定向到应用程序中的某个位置。

我在数据库中有一些表绑定(bind)到该表,但是这种连接是动态的。例如,此表:
tbl_Jobs{JobId, Title etc.}, tbl_Articles{ArticleId, Title etc.}

这是问题所在:
在添加IsInfoInfoItemId之前,我只有一种类型,用户可以在其中输入此信息,而我所需要的只是获取信息列+用户全名:
select i.*, p.FirstName + ' ' + p.LastName as Author
from tbl_Info i
left join tbl_Profiles p on i.UserName = p.UserName
where i.PrivacyTypeId = 1

现在,我需要使用Author的名称来更改此Title列,并且该值应为:全名或职务或文章标题等。

我不知道是否可以进行选择过程,以便它可以基于IsInfoTypeId从另一张ID为InfoItemId的表中获取项目标题。

类似于:If IsInfo = True。获取typeId。并基于此typeId连接到某个表并从中获取一些列。
IF typeId = 2 ... join tbl_Jobs on ...
IF typeId = 3 ... join tbl_Articles on ...

抱歉,我的帖子更长了。但是我找不到解决方案,我需要更详细地解释问题。

最佳答案

您可以执行以下操作:

SELECT
 CASE typeID
   WHEN 1 THEN tbl_Profiles.FirstName + ' ' + tbl_Profiles.LastName
   WHEN 2 THEN ...
   WHEN 3 THEN ...
 END AS Title
FROM tbl_Info
LEFT OUTER JOIN tbl_Profiles ON
   tbl_Info.UserName = tbl_Profiles.UserName
   AND typeID = 1
LEFT OUTER JOIN tbl_Jobs ON
   ....
   AND typeID = 2
LEFT OUTER JOIN tbl_Articles ON
   ....
   AND typeID = 3

关于sql - 如何动态决定要在SQL Server存储过程中加入哪些表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8764381/

10-10 20:23