gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:56:03 24 4
gpt4 key购买 nike

我有一个表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 的另一个表中获取项目标题.

就像这样:如果 IsInfo = True。获取类型 ID。并基于此 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com