首页 > 解决方案 > 如何修复“子查询返回多个值”?

问题描述

我正在尝试编写一个存储过程,该过程必须验证我的数据库中是否不存在名称,如果名称不存在,我将创建一个带有名称的新行并通过。

我有这个错误:子查询返回多个值。

    this is my code :

    if((select Nom from prorio where Nom = @p_nom) = '')

    insert into Prorio (Nom, mdp) VALUES (@p_nom, @p_mdp);
    else if((select Nom from prorio where Nom = @p_nom)!='')
    return 2;

标签: sqlsql-server

解决方案


似乎您所追求的逻辑是:

IF (@p_nom = '' AND EXISTS(SELECT 1 FROM Prorio WHERE Nom = '')) BEGIN

    INSERT INTO dbo.Prorio (Nom,mdp)
    VALUES(@p_nom,@p_mdp);

END
ELSE IF @p_nom != '' BEGIN 

    SET @OutputParam = 2;
END;

您需要添加@OutputParam到您的 SP 定义(作为OUTPUT参数),并可能给它一个“更好”的名称。

不过,这似乎确实是个XY问题。您拥有的逻辑意味着,如果此人的姓名为空白 ( ''),则只有在表中的其他行已经有空白 ( ) 姓名时才能插入他们。这似乎是一个设计缺陷。''


推荐阅读