如何动态决定在SQL Server存储过程中加入哪些表

111*_*110 5 sql t-sql sql-server stored-procedures sql-server-2008

我有一张桌子tbl_Info:

InfoId
Text
PrivacyTypeId
UserName
TypeId
IsInfo
InfoItemId
Run Code Online (Sandbox Code Playgroud)

数据示例:

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
Run Code Online (Sandbox Code Playgroud)

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

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

我在数据库中有一些绑定到此表的表,但此连接非常动态.例如这个表:

tbl_Jobs{JobId, Title etc.}, tbl_Articles{ArticleId, Title etc.}
Run Code Online (Sandbox Code Playgroud)

问题出
这里:在我添加之前IsInfo,InfoItemId我只有一种用户输入此信息的类型,我只需要获取信息列+用户全名:

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
Run Code Online (Sandbox Code Playgroud)

现在我需要更改Author名称为的列,Title此值应为:全名或职位或文章标题等.

我不知道是否可以制作选择程序,因此它可以基于IsInfoTypeId从ID为的另一个表中获取项目标题InfoItemId.

如下所示:如果IsInfo = True.获取typeId.并基于此typeId连接到某个表并从中获取一些列.

IF typeId = 2 ... join tbl_Jobs on ...
IF typeId = 3 ... join tbl_Articles on ...
Run Code Online (Sandbox Code Playgroud)

对不起,我很抱歉.但我找不到解决方案,我需要更详细地解释问题.

Pao*_*lla 11

你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)