SQL Server过程从表中查找其id以特定数字开头的行不工作
本文关键字:数字 开头 工作 id 过程 Server 查找 SQL | 更新日期: 2023-09-27 18:11:34
我试图编写一个SQL Server存储过程,返回字符串列表,然后我将在我的ASP中使用AjaxAutoCompleteExtender
返回的列表。因此,当用户开始输入字符串(例如60)时,该过程应返回id '以输入字符串(601,602,605,…等)开头的所有用户的名称。
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程序上。
有什么想法吗,提前感谢
如果我正确理解您的目标,您希望检索所有用户,其中他们的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等的用户…