目标:
要查询数据库中的一个操作日志表,其中要根据日志内容进行筛选,比如要查询所有日志内容中有 添加 字样的记录;
代码:
1
SET QUOTED_IDENTIFIER ON
2
GO
3
SET ANSI_NULLS OFF
4
GO
5
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetOperationLogs]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
6
drop procedure [dbo].[GetOperationLogs]
7
GO
8
9
10
/* 查询Voltage_Dist_Data的存储过程 */
11
create procedure GetOperationLogs
12
(
13
@useridList varchar(500),
14
@BeginTime datetime,
15
@EndTime datetime,
16
@description varchar(500)
17
)
18
as
19
begin
20
declare @s varchar(2000)
21
set @s='select * from d_lg_6'
22
/* 如果没有设置任何查询条件,在返回所有的operationlogs */
23
if ((@useridList=null)and(@BeginTime=null)and(@EndTime=null)and(@Description=null))
24
begin
25
exec(@s)
26
return
27
end
28
set @s=@s+' where '
29
/*如果设置了useridList,则返回这些用户的OperationLogs */
30
if (@useridList!=null)
31
set @s=@s+' userid in ('+@useridList+') and '
32
/*如果设置了查询时间,则返回该时间那的查询时间*/
33
if ((@BeginTime!=null)and(@EndTime!=null))
34
set @s=@s+' logtime between '''+convert(varchar(19),@BeginTime,120)+''' and '''+convert(varchar(19),@endtime,120)+''' and '
35
/*如果设置了日志内容过滤器,则过滤日志内容 */
36
if (@Description!=null)
37
set @s=@s+' Description like ''%'+@Description+'%'''
38
if (substring(@s,len(@s)-2,3)='and')
39
set @s=substring(@s,0,len(@s)-3)
40
exec(@s)
41
--select @s
42
--select substring(@s,len(@s)-2,3)
43
end
44
GO
45
SET QUOTED_IDENTIFIER OFF
46
GO
47
SET ANSI_NULLS ON
48
GO

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

这里的关键还是 两个单眼号的连续使用,注意观察
1
if (@Description!=null)
2
set @s=@s+' Description like ''%'+@Description+'%'''
这里%旁边的是两个单眼号,而不是双眼号;
2

注意了这点就ok了,其他的没什么好说的;
祝你成功