我试图从一个数据库中获得一个结果,这将被选择后,知道一个国家的用户给出了他的电子邮件。
我试过使用EXEC(),但现在我从不同的用户那里得到了太多的结果,因为我在“where”子句中明确表示我只想要来自特定用户的结果。
我首先尝试使用纯内部连接进行查询,但它失败了,它表明存在语法错误,但是如果我在没有exec的情况下单独运行它,它就可以工作。
在那之后,我决定使用子查询,但正如我在上面提到的,它返回所有的值,就好像它没有考虑“where”一样。
我做错了什么?
以下是查询的示例:
DECLARE @email nvarchar(150) = 'name.lastname@mx.company.com'
--Getting the country code of user
DECLARE @country_code nvarchar(3) = (SELECT country_code FROM general.countries WHERE id_country = (SELECT fk_country FROM databases_access.staff WHERE email = @email))
--Setting user database to search for job title & department
DECLARE @dbname NVARCHAR(25)
SET @dbname = 'dsv_global_' + @country_code
Declare @query nvarchar(500)
-- Query to be run to to get the user department and job title
SET @query =
'
USE '+@dbname+'
SELECT
id_staff,
email,
(SELECT complete_name_dept FROM dsv_global.departments WHERE id_department = fk_department),
(SELECT CONCAT(title,'' '',description) FROM dsv_global.job_titles WHERE id_job_title = (SELECT fk_title FROM dsv_global.staff_information WHERE fk_staff = id_staff)) ,
(SELECT COUNT(fk_staff) FROM dsv_global.staff_managers WHERE fk_manager = fk_staff)
FROM dsv_global.staff
WHERE email = '''+@email+''' AND status = ''ACTIVE''
'
----Storing department & title from user in temp table
--DECLARE @user_info TABLE (id_staff int, email nvarchar(200),complete_name_dept nvarchar(100), title nvarchar(200),num_of_errors int)
--INSERT INTO @user_info
EXEC(@query)编辑:
我希望收到:

但我收到的是:

发布于 2020-04-15 08:40:10
在处理复杂查询时,使用公用表表达式是值得的。您可以使用WITH来定义一个临时命名的结果集,该结果集在语句的执行范围内暂时可用。另一方面,为您的COUNT函数设置GROUP BY。此外,您还需要将id_staff放入WITH块中,如下所示:
WITH cte_titles ( job_title)
AS (
SELECT CONCAT(title,'' '',description)
FROM dsv_global.job_titles
WHERE id_job_title IN
(SELECT fk_title
FROM dsv_global.staff_information
WHERE fk_staff = id_staff)
),
cte_staff (count_staff) AS
(
SELECT COUNT(fk_staff)
FROM dsv_global.staff_managers
WHERE fk_manager = fk_staff
GROUP BY fk_staff
)
SELECT
dsv.id_staff,
dsv.email,
job_title,
count_staff,
FROM dsv_global.staff dsv
cte_staff,
cte_titles
WHERE email = '''+@email+''' AND status = ''ACTIVE''发布于 2020-04-16 09:42:13
问题是我没有分配足够的空间来将查询存储在字符串中:
我有:
Declare @query nvarchar(500)我将其更改为:
Declare @query nvarchar(500)https://stackoverflow.com/questions/61219049
复制相似问题