SQL Server过程代码卡住

SQL Server过程代码卡住,sql,sql-server,Sql,Sql Server,我从这个代码中得到一个错误 DECLARE @existingEmail AS INT SET NOCOUNT ON; @existingEmail = COUNT(*) AS total FROM table WHERE email = @email; INSERT INTO table2 (email) VALUES (CASE WHEN @existingEmail IS 1 THEN 'Yes' ELSE 'No' END); 这就是我所犯的错误 Msg 102,15级,状态1,

我从这个代码中得到一个错误

DECLARE @existingEmail AS INT

SET NOCOUNT ON;

@existingEmail = COUNT(*) AS total FROM table WHERE email = @email;

INSERT INTO table2 (email)
VALUES (CASE WHEN @existingEmail IS 1 THEN 'Yes' ELSE 'No' END);
这就是我所犯的错误

Msg 102,15级,状态1,程序sp_计数,第21行[批次开始第7行]
“@existingEmail”附近的语法不正确


在您试图设置变量的行中
@existingEmail
缺少关键字
set
。如果将该行更新为以下内容,则应解决该错误

set @existingEmail = (SELECT COUNT(*) from table where email = @email);

在您试图设置变量的行中
@existingEmail
缺少关键字
set
。如果将该行更新为以下内容,则应解决该错误

set @existingEmail = (SELECT COUNT(*) from table where email = @email);
与此相反:

@existingEmail = COUNT(*) as total from table where email = @email;
您需要这样做:

SELECT @existingEmail = COUNT(*) as total from table where email = @email;
或者这个:

SET @existingEmail = (SELECT COUNT(*) as total from table where email = @email);
与此相反:

@existingEmail = COUNT(*) as total from table where email = @email;
您需要这样做:

SELECT @existingEmail = COUNT(*) as total from table where email = @email;
或者这个:

SET @existingEmail = (SELECT COUNT(*) as total from table where email = @email);

从性能角度来看,使用
COUNT
检查是否存在可能不是最好的方法:

INSERT INTO table2 (email)
SELECT CASE WHEN EXISTS (SELECT 1 FROM table WHERE email = @email) THEN 'Yes' 
       ELSE 'No' END

从性能角度来看,使用
COUNT
检查是否存在可能不是最好的方法:

INSERT INTO table2 (email)
SELECT CASE WHEN EXISTS (SELECT 1 FROM table WHERE email = @email) THEN 'Yes' 
       ELSE 'No' END

是否确实要
插入
新行或
更新
现有行?
@existingEmail=COUNT(*)作为email=@email
单词
在哪里选择
?是否确实要
插入
新行或
更新
现有行?
@existingEmail=COUNT(*)作为来自表中的总计,其中email=@email单词
SELECT
在哪里?在使用set或SELECT之后,我仍然得到一个错误:
Msg 156,级别15,状态1,过程sp_计数,第21行[批处理开始行7]关键字“from”附近的语法不正确。Msg 102,15级,状态1,程序sp_计数,第25行[批处理开始行7]靠近“1”的语法不正确。
我在您发布的代码中的
附近没有看到任何错误,因此您可能混淆了它。至于
1
,您应该使用
=1
而不是
IS 1
。在使用set或select之后,我仍然得到一个错误:
Msg 156,级别15,状态1,过程sp_计数,第21行[批处理开始行7]关键字“from”附近的语法不正确。Msg 102,15级,状态1,程序sp_计数,第25行[批处理开始行7]靠近“1”的语法不正确。
我在您发布的代码中的
附近没有看到任何错误,因此您可能混淆了它。至于
1
,你应该使用
=1
而不是
IS 1
。如果你能详细说明你为什么提出这个解决方案以及它在做什么,这将是一个更好的答案。不是一个简单的代码回答我觉得没有必要详细说明,因为其他评论都提到了它的“原因”。如果你能详细说明你为什么提出这个解决方案以及它在做什么,这将是一个更好的答案。不是一个简单的代码回答,我觉得没有必要详细说明,因为其他评论涵盖了它的“为什么”。