【问题标题】:Cannot create stored procedure. Only one expression can be specified in the select list无法创建存储过程。选择列表中只能指定一个表达式
【发布时间】:2016-11-22 18:16:33
【问题描述】:

我想创建一个存储过程来根据用户登录凭据返回特定的整数值。出现以下错误:

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

这是我的查询:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE Login 
    -- Add the parameters for the stored procedure here
    @userName nvarchar(100),
    @password nvarchar(100)
AS
BEGIN

    SET NOCOUNT ON;

   IF((Select COUNT(*) as Count FROM SimpleSite.dbo.Users WHERE UserName = @userName)=1)
      BEGIN
       IF((SELECT * FROM SimpleSite.dbo.Users WHERE UserName = @userName AND [Password] = @password)=1)
       -- valid login 
       RETURN 1
       ELSE       
       -- wrong password      
       RETURN 2
      END           
   ELSE
       -- No account associated with the username 
       RETURN 3          
END
GO

我该如何克服这个问题?

【问题讨论】:

  • 您有两个选择。其中一个有什么不同的方法吗?

标签: sql sql-server stored-procedures


【解决方案1】:
   IF((SELECT * FROM SimpleSite.dbo.Users WHERE UserName = @userName AND [Password] = @password)=1)

这不会等于 1,它将返回该行的所有字段。

改成这个...

   IF((SELECT count(*) FROM SimpleSite.dbo.Users WHERE UserName = @userName AND [Password] = @password)=1)

【讨论】:

  • 谢谢伙计。可惜我没看到这个
  • @chrisBint Count(*) 比 Count(1) 花费更多时间,为什么您不在此查询中使用 Count(1)
  • @A.Goutam - 至少从 SQL Server 2005 开始就不是这样了 - 请参阅 stackoverflow.com/questions/1221559/count-vs-count1
【解决方案2】:

请尝试给你反馈

IF EXISTS((Select COUNT(1) as Count FROM SimpleSite.dbo.Users WHERE UserName = @userName AND [Password] = @password)=1)
      BEGIN
       IF((SELECT COUNT(1) FROM SimpleSite.dbo.Users WHERE UserName = @userName AND [Password] = @password)=1)
       -- valid login 
       RETURN 1
       ELSE       
       -- wrong password      
       RETURN 2
      END           
   ELSE
       -- No account associated with the username 
       RETURN 3  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2018-04-14
    相关资源
    最近更新 更多