存储过程里面如何动态拼接sql语句,通过if语句???
现在有学生表,student,
字段如下,
stuid,stuname,stuage,stu_class_id,stumobile,stubirthday,stuaddress
现在想要拼接一条查询语句的存储过程。。
我想知道如果用户不输入某个查询条件是,存储过程里面该如何判断???
类似c#里面
string strsql = "select * from student where 1=1";
if(stuname!="")
{
strsql += "and stuname link '%name%'";
}
use testdb
go
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
declare @sql nvarchar(1000)
set @sql='select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1'
if @stuid!=null
begin
set @sql = @sql+'and s.stuid='+@stuid
end
EXEC(@sql)
go
use testdb
go
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
declare @sql nvarchar(1000)
set @sql=' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
if(@stuid is not null)
begin
set @sql = @sql+' and s.stuID='+convert(nvarchar,@stuid) + ' '
end
if(@stuName is not null)
begin
set @sql = @sql+' and s.stuName like ''%'+@stuName +'%'''
end
print (@sql)
go
use testdb
go
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
declare @sql nvarchar(1000)
set @sql=' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
if(@stuid is not null)
begin
set @sql = @sql+' and s.stuID='+convert(nvarchar,@stuid) + ' '
end
if(@stuName is not null)
begin
set @sql = @sql+' and s.stuName like ''%'+@stuName +'%'' '
end
if(@stuBirthday is not null)
begin
set @sql = @sql+' and s.stuBirthday>=CONVERT(datetime,'''+@stuBirthday +''',''yyyy-MM-dd hh24:mi:ss'')'
end
print (@sql)
go
Select CONVERT(varchar(100), GETDATE(), 0)--05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1)--05/16/06 Select CONVERT(varchar(100), GETDATE(), 2)--06.05.16 Select CONVERT(varchar(100), GETDATE(), 3)--16/05/06 Select CONVERT(varchar(100), GETDATE(), 4)--16.05.06 Select CONVERT(varchar(100), GETDATE(), 5)--16-05-06 Select CONVERT(varchar(100), GETDATE(), 6)--16 05 06 Select CONVERT(varchar(100), GETDATE(), 7)--05 16, 06 Select CONVERT(varchar(100), GETDATE(), 8)--10:57:46 Select CONVERT(varchar(100), GETDATE(), 9)--05 16 200610:57:46:827AM Select CONVERT(varchar(100), GETDATE(), 10)--05-16-06 Select CONVERT(varchar(100), GETDATE(), 11)--06/05/16 Select CONVERT(varchar(100), GETDATE(), 12)--060516 Select CONVERT(varchar(100), GETDATE(), 13)--16 05 2006 10:57:46:937 Select CONVERT(varchar(100), GETDATE(), 14)--10:57:46:967 Select CONVERT(varchar(100), GETDATE(), 20)--2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21)--2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 22)--05/16/06 10:57:47 AM Select CONVERT(varchar(100), GETDATE(), 23)--2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24)--10:57:47 Select CONVERT(varchar(100), GETDATE(), 25)--2006-05-16 10:57:47.250 Select CONVERT(varchar(100), GETDATE(), 100)--05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 101)--05/16/2006 Select CONVERT(varchar(100), GETDATE(), 102)--2006.05.16 Select CONVERT(varchar(100), GETDATE(), 103)--16/05/2006 Select CONVERT(varchar(100), GETDATE(), 104)--16.05.2006 Select CONVERT(varchar(100), GETDATE(), 105)--16-05-2006 Select CONVERT(varchar(100), GETDATE(), 106)--16 05 2006 Select CONVERT(varchar(100), GETDATE(), 107)--05 16, 2006 Select CONVERT(varchar(100), GETDATE(), 108)--10:57:49 Select CONVERT(varchar(100), GETDATE(), 109)--05 16 200610:57:49:437AM Select CONVERT(varchar(100), GETDATE(), 110)--05-16-2006 Select CONVERT(varchar(100), GETDATE(), 111)--2006/05/16 Select CONVERT(varchar(100), GETDATE(), 112)--20060516 Select CONVERT(varchar(100), GETDATE(), 113)--16 05 2006 10:57:49:513 Select CONVERT(varchar(100), GETDATE(), 114)--10:57:49:547 Select CONVERT(varchar(100), GETDATE(), 120)--2006-05-16 10:57:49 Select CONVERT(varchar(100), GETDATE(), 121)--2006-05-16 10:57:49.700 Select CONVERT(varchar(100), GETDATE(), 126)--2006-05-16T10:57:49.827 Select CONVERT(varchar(100), GETDATE(), 130)--18 ???? ?????? 142710:57:49:907AM Select CONVERT(varchar(100), GETDATE(), 131)--18/04/142710:57:49:920AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 0)
--05 16 2006 10:57AM SELECT CONVERT(VARCHAR(100), GETDATE(), 1)
--05/16/06 SELECT CONVERT(VARCHAR(100), GETDATE(), 2)
--06.05.16 SELECT CONVERT(VARCHAR(100), GETDATE(), 3)
--16/05/06 SELECT CONVERT(VARCHAR(100), GETDATE(), 4)
--16.05.06 SELECT CONVERT(VARCHAR(100), GETDATE(), 5)
--16-05-06 SELECT CONVERT(VARCHAR(100), GETDATE(), 6)
--16 05 06 SELECT CONVERT(VARCHAR(100), GETDATE(), 7)
--05 16, 06 SELECT CONVERT(VARCHAR(100), GETDATE(), 8)
--10:57:46 SELECT CONVERT(VARCHAR(100), GETDATE(), 9)
--05 16 200610:57:46:827AM SELECT CONVERT(VARCHAR(100), GETDATE(), 10)
--05-16-06 SELECT CONVERT(VARCHAR(100), GETDATE(), 11)
--06/05/16 SELECT CONVERT(VARCHAR(100), GETDATE(), 12)
--060516 SELECT CONVERT(VARCHAR(100), GETDATE(), 13)
--16 05 2006 10:57:46:937 SELECT CONVERT(VARCHAR(100), GETDATE(), 14)
--10:57:46:967 SELECT CONVERT(VARCHAR(100), GETDATE(), 20)
--2006-05-16 10:57:47 SELECT CONVERT(VARCHAR(100), GETDATE(), 21)
--2006-05-16 10:57:47.157 SELECT CONVERT(VARCHAR(100), GETDATE(), 22)
--05/16/06 10:57:47 AM SELECT CONVERT(VARCHAR(100), GETDATE(), 23)
--2006-05-16 SELECT CONVERT(VARCHAR(100), GETDATE(), 24)
--10:57:47 SELECT CONVERT(VARCHAR(100), GETDATE(), 25)
--2006-05-16 10:57:47.250 SELECT CONVERT(VARCHAR(100), GETDATE(), 100)
--05 16 2006 10:57AM SELECT CONVERT(VARCHAR(100), GETDATE(), 101)
--05/16/2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 102)
--2006.05.16 SELECT CONVERT(VARCHAR(100), GETDATE(), 103)
--16/05/2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 104)
--16.05.2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 105)
--16-05-2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 106)
--16 05 2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 107)
--05 16, 2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 108)
--10:57:49 SELECT CONVERT(VARCHAR(100), GETDATE(), 109)
--05 16 200610:57:49:437AM SELECT CONVERT(VARCHAR(100), GETDATE(), 110)
--05-16-2006 SELECT CONVERT(VARCHAR(100), GETDATE(), 111)
--2006/05/16 SELECT CONVERT(VARCHAR(100), GETDATE(), 112)
--20060516 SELECT CONVERT(VARCHAR(100), GETDATE(), 113)
--16 05 2006 10:57:49:513 SELECT CONVERT(VARCHAR(100), GETDATE(), 114)
--10:57:49:547 SELECT CONVERT(VARCHAR(100), GETDATE(), 120)
--2006-05-16 10:57:49 SELECT CONVERT(VARCHAR(100), GETDATE(), 121)
--2006-05-16 10:57:49.700 SELECT CONVERT(VARCHAR(100), GETDATE(), 126)
--2006-05-16T10:57:49.827 SELECT CONVERT(VARCHAR(100), GETDATE(), 130)
--18 ???? ?????? 142710:57:49:907AM SELECT CONVERT(VARCHAR(100), GETDATE(), 131)--18/04/142710:57:49:920AM
use testdb
go
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
declare @sql nvarchar(1000)
set @sql=N' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
if(@stuid is not null)
begin
set @sql = @sql+' and s.stuID='+convert(nvarchar,@stuid) + ' '
end
if(@stuName is not null)
begin
set @sql = @sql+' and s.stuName like ''%'+@stuName +'%'' '
end
if(@stuBirthday is not null)
begin
set @sql = @sql+' and s.stuBirthday>=CONVERT(varchar(100),'''+@stuBirthday +''',121)'
end
print (@sql)
go
exec getStuList null,'张三','2012-10-11 12:11:11'
select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 and s.stuName like '%张三%' and s.stuBirthday>=CONVERT(varchar(100),'
+ @stuBirthday + ',121)
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
declare @sql nvarchar(1000)
set @sql=N' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
if(@stuid is not null)
begin
set @sql = @sql+' and s.stuID='+convert(nvarchar,@stuid) + ' '
end
if(@stuName is not null)
begin
set @sql = @sql+' and s.stuName like ''%'+@stuName +'%'' '
end
if(@stuBirthday is not null)
begin
set @sql = @sql+' and s.stuBirthday>='+CONVERT(VARCHAR(30),@stuBirthday,121)
end
print (@sql)
go
exec getStuList null,'张三','2012-10-11 12:11:11'
use testdb
go
if exists (select name from sysobjects where name='getStuList' and type='p')
drop procedure getStuList
go
create procedure getStuList
@stuid int,
@stuName nvarchar(50),
@stuBirthday datetime
AS
/*
DECLARE @sql NVARCHAR(1000)
SET @sql = N' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
IF ( @stuid IS NOT NULL )
BEGIN
SET @sql = @sql + ' and s.stuID=' + CONVERT(NVARCHAR, @stuid)
+ ' '
END
IF ( @stuName IS NOT NULL )
BEGIN
SET @sql = @sql + ' and s.stuName like ''%' + @stuName + '%'' '
END
IF ( @stuBirthday IS NOT NULL )
BEGIN
SET @sql = @sql + ' and s.stuBirthday>='''+convert(nvarchar(25),@stuBirthday)+''''
END
PRINT ( @sql ) */
declare @sql nvarchar(1000)
set @sql=N' select s.stuID,s.stuName,s.stuSex,s.stuBirthday,s.stuAddress,s.stu_class_id
from Student as s where 1=1 '
if(@stuid is not null)
begin
set @sql = @sql+' and s.stuID='+convert(nvarchar,@stuid) + ' '
end
if(@stuName is not null)
begin
set @sql = @sql+' and s.stuName like ''%'+@stuName +'%'' '
end
if(@stuBirthday is not null)
begin
set @sql = @sql+' and s.stuBirthday>='''+ CONVERT(nvarchar(25),@stuBirthday,121) +''''
end
print (@sql)
go
exec getStuList null,'张三','2012-10-11 12:11:11'