SQL Server过程从表中查找其id以特定数字开头的行不工作

本文关键字:数字 开头 工作 id 过程 Server 查找 SQL | 更新日期: 2023-09-27 18:11:34

我试图编写一个SQL Server存储过程,返回字符串列表,然后我将在我的ASP中使用AjaxAutoCompleteExtender返回的列表。因此,当用户开始输入字符串(例如60)时,该过程应返回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工作并返回id为601的全名用户)。

我猜问题出在我的SQL Server程序上。

有什么想法吗,提前感谢

SQL Server过程从表中查找其id以特定数字开头的行不工作

如果我正确理解您的目标,您希望检索所有用户,其中他们的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等的用户…