首页 > 解决方案 > SQL Server:存储过程的语法错误

问题描述

我有一个简单的查询,例如:

SELECT
    1 AS [Result],
    'success' AS [ResultText]

IF (@TaskStatusName = 'COMPLETED')
    SELECT 
        5 AS [ToNotifiedResult],
        SELECT @TechniciansEmail = COALESCE(@TechniciansEmail + ';', '') + [Username]  
        FROM Employee  AS [E]
  INNER JOIN TaskNotification AS [TN] ON TN.EmpKey = E.EmpKey AND TaskId = '64BB7072-62A5-4C8E-A385-3B3DCB8BD1CA' AS [ToNotified]

问题出在最后一个选择中,它只是说

“选择”附近的语法不正确

并且“选择”字被标记为红色

我尝试用括号将该选择分组为:

 ,(SELECT @TechniciansEmail = COALESCE(@TechniciansEmail + ';', '') + [Username]  FROM Employee  AS [E]
  INNER JOIN TaskNotification AS [TN] ON TN.EmpKey = E.EmpKey AND TaskId = '64BB7072-62A5-4C8E-A385-3B3DCB8BD1CA' AS [ToNotified])

但是现在@TechniciansEmail变量被标记为红色,我得到了

@TechniciansEmail 附近的语法不正确。期待 '(' 或 SELECT

我真的不知道我做错了什么,有什么想法吗?

标签: sql-servertsql

解决方案


这一行:

SELECT @TechniciansEmail = COALESCE(@TechniciansEmail + ';', '') + [Username] 

要么完全不合适,要么尝试创建子查询,在这种情况下,它需要放在括号中,并有自己的 FROM 子句。

实际上,根据您问题的后半部分,您似乎应该将此行作为自己的单独查询,因为它填充了一个变量:

SELECT  
    @TechniciansEmail = COALESCE(@TechniciansEmail + ';', '') + [Username]  
FROM 
    Employee  AS [E]
INNER JOIN 
    TaskNotification AS [TN] ON TN.EmpKey = E.EmpKey AND TaskId = '64BB7072-62A5-4C8E-A385-3B3DCB8BD1CA'

推荐阅读