gpt4 book ai didi

sql-server - 嵌入在选择查询中的动态 SQL

转载 作者:行者123 更新时间:2023-12-02 23:56:06 28 4
gpt4 key购买 nike

我有一张 table Users ,

╔════╦═══════╦══════╗║ Id ║ Name  ║  Db  ║╠════╬═══════╬══════╣║  1 ║ Peter ║ DB1  ║║  2 ║ John  ║ DB16 ║║  3 ║ Alex  ║ DB23 ║╚════╩═══════╩══════╝

and many databases that have the same structure (Same tables, same procedures, ...), so every database have a table named Project, and this is the structure of Project table,

╔════╦═════════╦═════════════╗║ Id ║ Request ║ Information ║╠════╬═════════╬═════════════╣║  1 ║     126 ║ XB1         ║║  2 ║     126 ║ D6          ║║  3 ║     202 ║ BM-23       ║╚════╩═════════╩═════════════╝

So, when I query a database :

SELECT count(distinct([Request])) as nbrRequests
FROM [SRV02].[DB1].[dbo].[Project]

我得到这个结果:

╔═════════════╗║ NbrRequests ║╠═════════════╣║           2 ║╚═════════════╝

现在,我想要的是“链接”/“加入”...表 Users 中的结果对于此查询,其中列 DbUsers table 是我的数据库的名称,所以我可以获得这样的结果:

╔════╦═══════╦══════╦═════════════╗║ Id ║ Name  ║  Db  ║ NbrRequests ║╠════╬═══════╬══════╬═════════════╣║  1 ║ Peter ║ DB1  ║           2 ║║  2 ║ John  ║ DB16 ║           3 ║║  3 ║ Alex  ║ DB23 ║           6 ║╚════╩═══════╩══════╩═════════════╝

我正在尝试使用动态 SQL,但没有成功。

注意:每个用户只有一个数据库,一个数据库只属于一个用户,是一对一的关系

最佳答案

可以使用 UNION 计算每个特定数据库表并为其指定数据库标识,如下所示:

SELECT u.Id, u.Name, u.Db, dbCts.nbrRequests
FROM [Users] u INNER JOIN
(SELECT 'DB1' as db, count(distinct([Request])) as nbrRequests
FROM [SRV02].[DB1].[dbo].[Project]
UNION
SELECT 'DB16', count(distinct([Request])) as nbrRequests
FROM [SRV02].[DB16].[dbo].[Project]
UNION
SELECT 'DB23', count(distinct([Request])) as nbrRequests
FROM [SRV02].[DB23].[dbo].[Project]
) dbCts ON u.Db = dbCts.db

不要忘记将服务器和架构添加到 Users 表中,我没有这样做,因为您的问题没有此类信息。

此外,为了执行此操作,您连接的用户必须拥有所有数据库的权限。

关于sql-server - 嵌入在选择查询中的动态 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35795006/

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