SQL 从 table 中查找其 ID 以特定数字开头的行的服务器过程不起作用

SQL Server procedure to find rows from table that its id starts with a specific number not working

我正在尝试编写一个 SQL 服务器存储过程,其中 return 是一个字符串列表,然后我将在 AjaxAutoCompleteExtender 中使用这个 returned 列表我的 ASP.Net 网站,所以当用户开始输入字符串(例如 60)时,程序应该 return 所有用户的名称,其中 ID' 以输入字符串(601、602、605 , ..等).

我写了下面的T-SQL存储过程:

CREATE PROCEDURE [dbo].[_GetUser_AutoComplete]
    @user_id int
AS
    IF ISNULL (CONVERT(nvarchar(50), @user_id), '') is not null
    BEGIN
         SELECT 
             [User].user_fname + ' ' + [User].user_mname + ' ' + [User].user_lname
         FROM 
             [User]
         WHERE 
             CONVERT(nvarchar(50), [user_id]) LIKE CONVERT(nvarchar(50), @user_id)
END

在我的 ASP.Net 网站中,我编写了调用此过程的代码:

public List<string> getUser_AutoComplete(int? user_id)
{
        SqlParameter UserId = new SqlParameter("@user_id ", user_id);
        UserId.SqlDbType = SqlDbType.Int;
        UserId.Direction = ParameterDirection.Input;

        var res = this.Database.SqlQuery<string>("exec _GetUser_AutoComplete @user_id", UserId).ToList<string>();
        return res;
    }

在我的 ASP.Net 网站中,我的 Default.aspx 中有以下标记:

<asp:TextBox ID="TextBoxUserId" runat="server"></asp:TextBox>
<act:AutoCompleteExtender 
     ServiceMethod="SearchUsers"
     MinimumPrefixLength="2" CompletionInterval="100" 
     EnableCaching="false" CompletionSetCount="10"
     TargetControlID="TextBoxUserId"
     ID="AutoCompleteExtender1" runat="server" FirstRowSelected="false">
</act:AutoCompleteExtender>

SearchUsers 处的代码是这样的:

[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List<string> SearchUsers(string prefixText, int count)
{
    List<string> users = new List<string>();
    int userId;

    bool isInputUserId = Int32.TryParse(prefixText, out userId);

    if(isInputUserId)
    {
            users = getUser_AutoComplete(userId);
    }

    return users;
}

问题是,在用户键入他正在搜索的用户的完整 ID 之前,没有任何自动完成(即,如果我在文本框中键入 60,如果没有 ID 为 60 的用户,则什么也不会发生,如果我写 601,autoCompleteExtender 有效,return id 为 601 的全名用户)。

我想问题出在我的 SQL 服务器程序中。

任何想法,提前致谢

如果我对您的 objective 的理解正确,您想要检索所有用户,其中他们的 user_id 以传递给存储过程的相同数字作为 @user_id 参数开始。

如果这是正确的,您需要将通配符添加到与 LIKE 运算符一起使用的搜索文本的末尾

ALTER PROCEDURE [dbo].[_GetUser_AutoComplete]
@user_id int
AS
declare @usertext nvarchar(50)
select @usertext = CONVERT(nvarchar(50), @user_id)
IF ISNULL (@usertext, '') is not null
BEGIN
    SELECT [User].user_fname + ' ' + [User].user_mname + ' ' + [User].user_lname
    FROM [User]
    WHERE CONVERT(nvarchar(50), [user_id]) LIKE @usertext + '%'
END

在这里,添加通配符 '%' 扩展了 LIKE 搜索的结果,包括每个 user_id 以传递的相同数字开头的结果。 例如,如果您传递 1,则结果将包括 user_id 等于 1、10、11、100、101、199 等的用户...