【问题标题】:SQL Server 2008 Select Count and Parameter Value in Stored ProcedureSQL Server 2008 在存储过程中选择计数和参数值
【发布时间】:2015-05-01 17:59:17
【问题描述】:

我正在使用 SQL Server 2008,并尝试先运行 SELECT COUNT。一旦检查计数是否等于 0,我需要替换特定参数的值。如果计数为 1,我需要从表中获取值。目前这是我的脚本:

CREATE PROCEDURE [dbo].[csp_LoginAuthentication]
    @employeeid VARCHAR (20),
    @password VARCHAR (20),
    @accountstatus INT OUT,
    @logincount INT OUT
AS
BEGIN
    SET NOCOUNT ON;     

    DECLARE @rowCnt INT    

    SELECT @rowCnt = (SELECT COUNT(*) 
                      FROM strato_blueapplesmis.dbo.app_login
                      WHERE 1 = 1
                        AND employee_id = @employeeid
                        AND password = @password)

    IF @rowCnt = 0
    BEGIN
        SET @accountstatus = 2
        SET @logincount = 0
    END
    ELSE
    BEGIN
        SELECT
            @accountstatus = account_status,
            @logincount = logincount
        FROM 
            strato_blueapplesmis.dbo.app_login
        WHERE 
            1 = 1
            AND employee_id = @employeeid
            AND password = @password
        END
    END         
END

我收到以下错误:

消息 102,级别 15,状态 1,过程 csp_LoginAuthentication,第 41 行
'END' 附近的语法不正确。

请帮忙,我真的很感谢大家的建议和反馈,我不太确定我是否走在正确的轨道上,我觉得我有点迷路了。

【问题讨论】:

  • 删除最后一个END,因为你太多了。
  • @Gserg:谢谢,这解决了问题!
  • 您不应该以纯文本形式存储密码。密码应该散列和加盐。

标签: sql-server sql-server-2008 stored-procedures parameters


【解决方案1】:

你的目的太多了。删除其中之一。具体如下:

 ELSE
        BEGIN
            SELECT
                @accountstatus = account_status,
                @logincount = logincount
            FROM strato_blueapplesmis.dbo.app_login
            WHERE 1 = 1
                AND employee_id = @employeeid
                AND password = @password
        END
    END   

else 中有 BEGIN 和 END,不需要额外的 END。你的整个代码都是这样的:

CREATE PROCEDURE [dbo].[csp_LoginAuthentication]
    @employeeid VARCHAR (20),
    @password VARCHAR (20),
    @accountstatus INT OUT,
    @logincount INT OUT
AS
BEGIN

    SET NOCOUNT ON;     
    DECLARE @rowCnt INT    
    SELECT @rowCnt = (SELECT COUNT(*) 
                        FROM strato_blueapplesmis.dbo.app_login
                        WHERE 1 = 1
                            AND employee_id = @employeeid
                            AND password = @password)
    IF @rowCnt = 0
        BEGIN
            SET @accountstatus = 2
            SET @logincount = 0
        END
    ELSE
        BEGIN
            SELECT
                @accountstatus = account_status,
                @logincount = logincount
            FROM strato_blueapplesmis.dbo.app_login
            WHERE 1 = 1
                AND employee_id = @employeeid
                AND password = @password
        END      
END  

还有WHERE 1 = 1 的意义何在?

【讨论】:

  • 是的,这解决了问题。谢谢。 :)
猜你喜欢
  • 2011-11-02
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多