在存储过程中 'SET' 关键字附近出现错误

Getting error near 'SET' keyword in stored procedure

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

Msg 156, Level 15, State 1, Procedure []usp_chkuseridpwd], Line 17
Incorrect syntax near the keyword 'set'.
incorrect syntax near 'set', expecting variable.

我的代码:

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

您在 @passwd as varchar(max),

中多了一个逗号

删除逗号即可解决您的问题。

更新:

这与错误无关。

但是您可能需要在使用 with 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

查询应该是:

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