T-SQL作业失败,''附近的语法不正确。 [SQLSTATE 42000](错误102)

时间:2015-06-27 12:03:52

标签: sql sql-server

只是想知道是否有人可以帮我弄清楚为什么这个T-SQL脚本不起作用。我在SQL方面的经验充其量只是新手。

DELETE FROM ActiveUsers
WHERE HostName + CAST(HostId AS CHAR) IN (SELECT HostName + CAST(HostId AS CHAR)
     FROM ActiveUsers ACTUSR
     WHERE NOT EXISTS (SELECT NULL)
     FROM master.dbo.sysprocesses SYSPRC
     WHERE SYSPRC.HostName = ACTUSR.HostName COLLATE database_default
     AND SYSPRC.HostProcess = ACTUSR.HostId
     GROUP BY SYSPRC.HostName, SYSPRC.HostProcess))

错误消息是:

Executed as user: . Incorrect syntax near ' '. [SQLSTATE 42000] (Error 102)  Incorrect syntax near ' '. [SQLSTATE 42000] (Error 102).  The step failed.

1 个答案:

答案 0 :(得分:0)

看起来你在行中有一个额外的右括号 WHERE NOT EXITS (SELECT NULL)

<强>更新

好的,你说你在选择null之后删除了括号,在这种情况下,以下2点也适用

  • 子查询中的GROUP BY子句是多余的,可以安全删除,因为您没有聚合函数,而只是检查结果NOT EXISTS
  • 还可以删除两个子查询中的一个,这将使您在下面进行查询。这将从ActiveUsers表中删除HostName表中未找到HostIdthe master.dbo.sysprocesses的记录。

试试这个,我已经测试过,它对我来说很好。

DELETE FROM ActiveUsers
WHERE NOT EXISTS (SELECT NULL
FROM master.dbo.sysprocesses SYSPRC
WHERE SYSPRC.HostName = ActiveUsers.HostName COLLATE database_default
AND SYSPRC.HostProcess = ActiveUsers.HostId)