写sql时经常会碰到条件不定的情况,这样的技巧受用无限
2015-01-19 18:03
369 查看
写sql时经常会碰到条件不定的情况,好多兄弟都是在哪儿无穷的拼接字符串,我也这样做过,太难弄了,老是搞错,后来用了这样的技巧受用无限:
原来的方法
其实最终就是学会OR的妙用
原来的方法
ALTER procEDURE [dbo].[HollySys_NewsArticles_GetLinks]
(
@sWhere nvarchar(255)
)
AS
declare @strYuJu nvarchar(1000)
set @strYuJu='SELECT [ID]
,[OrganizationID]
,[Link]
,[LinkTitle]
,[CreateDate]
,[CreateByUser]
,[IsDeleted]
,[ModafiedDate]
,[ModafiedUser]
,[Memo]
FROM [dbo].[HollySys_OrgLink]
where [IsDeleted]=0 '
set @strYuJu=@strYuJu+@sWhere
exec (@strYuJu)
其实最终就是学会OR的妙用
ALTER PROCEDURE [dbo].[HollySys_NewsArticles_GetArticles]
(
@ModuleId int,
@CategoryID int,
@SpecialID int,
@PageSize int,
@CurrentPageIndex int,
@Passed bit,
@Hot bit,
@Elite bit,
@Pic bit,
@Categories varchar(1000),
@SortField varchar(100),
@SearchCriteria varchar(100),
@SearchType tinyint,
@CreatedByUser varchar(100),
@Status tinyint,
@StartDate datetime,
@EndDate datetime,
@TotalRecords int output,
@GroupManage nvarchar(255)---扩展按部门查询
)
AS
-- Set the page bounds
DECLARE @PageLowerBound INT
DECLARE @PageUpperBound INT
IF @CurrentPageIndex = -1
SET @PageLowerBound = 0
ELSE
SET @PageLowerBound = @PageSize * @CurrentPageIndex
SET @PageUpperBound = @PageSize - 1 + @PageLowerBound
-- Create a temp table TO store the select results
CREATE TABLE #PageIndexFor_HollySys_NewsArticles_Article
(
IndexId int IDENTITY (0, 1) NOT NULL,
ArticleID int
)
IF @CurrentPageIndex = -1 AND @PageSize < 2147483647
SET ROWCOUNT @PageSize
INSERT INTO #PageIndexFor_HollySys_NewsArticles_Article (ArticleID)
SELECT A.[ArticleID]
FROM dbo.HollySys_NewsArticles_Article A
INNER JOIN dbo.HollySys_NewsArticles_Category C ON A.CategoryID = C.CategoryID
WHERE C.ModuleId = @ModuleId AND
(A.Passed = @Passed) AND
A.Hot IN(@Hot,0) AND
A.Elite IN(@Elite,0) AND
((A.DefaultPicUrl <> '' and @Pic =1)or @Pic=0) AND
(CHARINDEX (','+CONVERT(varchar(10),C.CategoryID)+',',','+@Categories+',') > 0) AND
((A.Title LIKE '%' + @SearchCriteria + '%' AND (@SearchType = 1 OR @SearchType = 2)) OR ((A.Content LIKE '%' + @SearchCriteria + '%' OR A.Summary LIKE '%' + @SearchCriteria + '%' OR A.KeyWords LIKE '%' + @SearchCriteria + '%') AND (@SearchType = 1 OR @SearchType = 4)) OR (A.Author LIKE '%' + @SearchCriteria + '%' AND (@SearchType = 1 OR @SearchType = 3)) OR @SearchCriteria = '') AND
(A.CreatedByUserID = @CreatedByUser OR @CreatedByUser = '-1') AND
(
(@Status = 0) OR
((@Status = 1) AND ((A.StartDate <= GETDATE() OR A.StartDate IS NULL) AND (A.EndDate > GETDATE()-1 OR A.EndDate IS NULL))) OR
((@Status = 2) AND (A.StartDate > GETDATE()) AND (A.StartDate IS NOT NULL)) OR
((@Status = 3) AND (A.EndDate <= GETDATE()-1) AND (A.EndDate IS NOT NULL))
) AND
(@StartDate < A.CreatedDate OR @StartDate IS NULL) AND
(A.CreatedDate < @EndDate + 1 OR @EndDate IS NULL) AND
(A.ArticleID IN (SELECT ArticleID FROM [/color]dbo.HollySys_NewsArticles_SpecialArticle WHERE SpecialID = @SpecialID) OR @SpecialID=-1)
ORDER BY
相关文章推荐
- sql 在not in 子查询有null值情况下经常出现的陷阱
- 配置环境时,经常碰到端口被占用的情况,用windows的命令就可以解决这一问题。
- C# SQL 多条件查询技巧
- 87 thinkphp 和sql查询条件为某字段不为空的情况
- 两个SQL技巧——排序和条件判断
- 动态SQL文中where条件是IN,而导入的参数个数不确定的情况(亲自实践)
- sql语句交集情况的查询技巧
- sql 在not in 子查询有null值情况下经常出现的陷阱
- sql 在not in 子查询有null值情况下经常出现的陷阱
- sql,ibatis文件不允许在where后添加1=1这样的无用条件,where可以写在prepend属性里
- sql 在not in 子查询有null值情况下经常出现的陷阱
- JDBC PreparedStatement 预编译语句 动态添加条件-SQL参数不定
- 采用sqlserver的缺省配置,在生产环境经常碰到系统响应慢(甚至hung的情况)
- http://www.dewen.net.cn/q/15720/这样的情况一个sql语句怎么写
- sql 语句中or条件之种种情况--
- C# SQL 多条件查询技巧
- 使用git pull代码时,经常会碰到有冲突的情况
- emap动态SQL,动态条件配置小技巧
- sql 语句中or条件之种种情况
- 多条件搜索功能的sql语句拼写技巧