sql - 子查询中的动态数据库
问题描述
SELECT
email, password,GP_employee_id, company,
(select distinct CHEKNMBR from [BSL].[dbo].[UPR30300] WHERE EMPLOYID = GP_employee_id and CHEKDATE > GETDATE() - 20 ) as slip_number,
(select distinct CONVERT(date , CHEKDATE) from [BSL].[dbo].[UPR30300] WHERE EMPLOYID = GP_employee_id and CHEKDATE > GETDATE() - 20 ) as slip_number
FROM [payslips].[dbo].[myapp_user]
我希望 [BSL] 是动态的。该值将取决于主查询的公司字段。所以我想要这样的 [company].[dbo].[UPR30300]
解决方案
你可以做一个大的动态UNION ALL
查询
DECLARE @unioned nvarchar(max) = (
SELECT STRING_AGG(CAST(
'
SELECT *, company = ' + QUOTENAME(company, '''') + '
FROM ' + QUOTENAME(company) + '.[dbo].[UPR30300]
WHERE CHEKDATE > DATEADD(day, -20, GETDATE())
'
AS nvarchar(max)), 'UNION ALL')
FROM (
SELECT DISTINCT company
FROM [payslips].[dbo].[myapp_user]
) au
);
DECLARE @sql nvarchar(max) = '
SELECT
au.email,
au.password,
au.GP_employee_id,
au.company,
slip_number = u.CHEKNMBR,
slip_number2 = CONVERT(date, u.CHEKDATE)
FROM [payslips].[dbo].[myapp_user] au
LEFT JOIN (
' + @unioned + '
) u ON u.company = au.company
AND u.EMPLOYID = au.GP_employee_id;
';
PRINT @sql; -- for testing
EXEC sp_executesql @sql;
推荐阅读
- sql - 来自两个表oracle SQL的所有记录对
- angular - Angular 浏览器缓存清除不起作用
- dax - DAX 度量与计算列
- c# - 如何在分布式 Windows 应用程序之间共享秘密而不将其保存到程序集中?
- deep-learning - 深度纯价值强化学习:训练 V(s) 而不是 Q(s,a)?
- django - 带有设置子文件夹的 django wsgi 设置
- c# - Xamarin ios 自定义 WKWebview 渲染器默认解析 youtube 视频全屏显示
- python - 使用 Google 进行阿拉伯情绪分析
- javascript - 快速会话空会话
- html - 如何删除摘要元素侧面的箭头?