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 等的用户...
我正在尝试编写一个 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 等的用户...