【问题标题】:Getting error near 'SET' keyword in stored procedure在存储过程中的“SET”关键字附近出现错误
【发布时间】:2016-08-12 09:21:21
【问题描述】:

我创建了一个存储过程,但在“SET”关键字附近出现错误:

消息 156,级别 15,状态 1,过程 []usp_chkuseridpwd],第 17 行
关键字“set”附近的语法不正确。
'set' 附近的语法不正确,需要变量。

我的代码:

alter procedure [usp_chkuseridpwd]
as
begin
    declare 
        /*variable declaration */
        @sql as varchar(max),
        @tblname varchar(max),
        @user_name varchar(max),
        @user_password varchar(max),
        @count int,
        @passwd as varchar(max),

    set @sql = 'select COUNT(*) from user_master where USER_NAME like '+@user_name+' and pasword like '+@user_password+''
    exec(@sql)
end

【问题讨论】:

  • 注意语法。 DECLARE 的最后一行 @passwd as varchar(max), 不应以逗号结尾。
  • 删除 DECLARE 末尾多余的逗号。

标签: sql-server stored-procedures syntax-error


【解决方案1】:

@passwd as varchar(max), 中多了一个逗号

删除逗号将解决您的问题。

更新:

这与错误无关。

但是当您使用 LIKE 运算符时,您可能需要包含 '%' 以获得更多相关结果。如果没有通配符'%',您需要传递确切的字符串才能获得结果。如果您知道用户名的部分字符串并想获取所有记录,则需要此'%'

所以存储过程将是:

ALTER PROCEDURE [usp_chkuseridpwd]
AS
BEGIN
    DECLARE 
        /*variable declaration */
        @sql as varchar(max),
        @tblname varchar(max),
        @user_name varchar(max),
        @user_password varchar(max),
        @count int,
        @passwd as varchar(max) -- removing the comma 

    -- Added % for the LIKE operator
    SET @sql = 'SELECT COUNT(*) FROM user_master WHERE USER_NAME LIKE %' + @user_name + '% AND pasword LIKE %' + @user_password + '%'
    EXEC(@sql)
END

【讨论】:

    【解决方案2】:

    查询应该是:

    alter procedure [usp_chkuseridpwd]
    as
    begin
        declare 
            /*variable declaration */
            @sql as varchar(max),
            @tblname varchar(max),
            @user_name varchar(max),
            @user_password varchar(max),
            @count int,
            @passwd as varchar(max)
    
        set @sql = 'select COUNT(*) from user_master where USER_NAME like '+@user_name+' and pasword like '+@user_password+''
        exec(@sql)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多