这样的一个查询的存储过程该怎么写呢?查询条件有三个:UserTypeID(用户类型) UserName(用户名) Activity(状态)要求:1、可以同时选择以上的三个条件进行查询;
2、也可以选择其中的一个或两个条件进行查询;
3、UserName(用户名)这个必须可以使用模糊查询。 请教,这能整合到一个存储过程中吗?
2、也可以选择其中的一个或两个条件进行查询;
3、UserName(用户名)这个必须可以使用模糊查询。 请教,这能整合到一个存储过程中吗?
@UserTypeID nvarchar(4)
@UserName nvarchar(4)
@Activity nvarchar(4)
as
declare @Sql varchar(200)
set @Sql='select * from Tb'
if(@UserTypeID <>'')
begin
set @Sql=@sql+' and UserTypeID ='''+@UserTypeID +''''
end
if(@UserName <>'')
begin
set @Sql=@sql+' and UserName like ''%'+@UserName +'%'''
end if(@Activity <>'')
begin
set @Sql=@sql+' and Activity like ''%'+@Activity +'%'''
end
exec (@sql)
(
@UserTypeID int,
@UserName varchar(50),
@Activity char (4)
)
as
declare @Sql varchar(200)
set @Sql='select u.UserID,u.UserName,u.Sex,u.Birthday,u.Photo,u.Phone,u.Email,u.EmployeeID,d.DepartmentName,u.Activity,t.UserTypeName,u.UserTypeID,d.DepartmentID
from TB_Users u,TB_Department d,TB_UserType t
where u.DepartmentID=d.DepartmentID and u.UserTypeID=t.UserTypeID '
if(@UserTypeID <>'')
begin
set @Sql=@sql+' and UserTypeID ='''+@UserTypeID +''''
end
if(@UserName <>'')
begin
set @Sql=@sql+' and UserName like ''%'+@UserName +'%'''
end if(@Activity <>'')
begin
set @Sql=@sql+' and Activity ='''+@Activity +''''
end
exec (@sql)
执行后出现这样的 提示EXEC @return_value = [dbo].[GetSearchUserM]
@UserTypeID = 1,
@UserName = N'a',
@Activity = N'可用'SELECT 'Return Value' = @return_value
消息 245,级别 16,状态 1,过程 GetSearchUserM,第 38 行
在将 varchar 值 'select u.UserID,u.UserName,u.Sex,u.Birthday,u.Photo,u.Phone,u.Email,u.EmployeeID,d.DepartmentName,u.Activity,t.UserTypeName,u.UserTypeID,d.DepartmentID
from TB_Users u,TB_Department d,TB_UserType t
and UserTypeID ='' 转换成数据类型 int 时失败。恕我愚昧,为什么有这样提示呢?
create procedure p_Query
(
@UserTypeID nvarchar(10)
@UserName nvarchar(50)
@Activity nvarchar(100)
as
begin
declare @Sql varchar(max)
set @Sql='select * from Tb'
if(@UserTypeID !='')
begin
set @Sql=@sql+' and UserTypeID ='+@UserTypeID
end
if(@UserName !='')
begin
set @Sql=@sql+' and UserName like ''%'+@UserName +'%'''
end if(@Activity !='')
begin
set @Sql=@sql+' and Activity like ''%'+@Activity +'%'''
end
execute (@sql)
end
将@UserTypeID由整型转化成varchar型
我传一个空值给UserTypeID 测试了一下其他的两个,发现没有达到预期的效果
cast(@UserTypeID as varchar)应为字符串型
现在,
转换成功,完整的存储工程是这样的:ALTER PROCEDURE [dbo].[GetSearchUserM]
(
@UserTypeID int,
@UserName varchar(50),
@Activity char (4)
)
as
declare @Sql varchar(200)
declare @sql1 int
set @Sql='select u.UserID,u.UserName,u.Sex,u.Birthday,u.Photo,u.Phone,u.Email,u.EmployeeID,d.DepartmentName,u.Activity,t.UserTypeName,u.UserTypeID,d.DepartmentID
from TB_Users u,TB_Department d,TB_UserType t
where u.DepartmentID=d.DepartmentID and u.UserTypeID=t.UserTypeID '
if(@UserTypeID <>'')
begin
set @Sql=@sql+' and UserTypeID ='''+ cast(@UserTypeID as varchar)+''''
end
if(@UserName <>'')
begin
set @Sql=@sql+' and UserName like ''%'+@UserName +'%'''
end if(@Activity <>'')
begin
set @Sql=@sql+' and Activity ='''+@Activity +''''
end
exec (@sql)但是新的问题又暴露出来 了,这个存储过程把全部的数据都检索出来了,而且同一条记录重复的次数很多
无法达到预期的限制的效果:1、可以同时选择以上的三个条件进行查询;
2、也可以选择其中的一个或两个条件进行查询;
3、UserName(用户名)这个必须可以使用模糊查询。
(UserID is null or UserID=@UserID) and
(isnull(@Activity,'')='' or Activity=@Activity) and
(isnull(@UserName,'')='' or UserName like '%' + @UserName + '%")
from TB_Users u,TB_Department d,TB_UserType t
where u.DepartmentID=d.DepartmentID and u.UserTypeID=t.UserTypeID我的这个查询语句查出来的 的也和数据库的记录一样,然后到添加后来那部分的条件的时候就出现了重复记录的问题。