您的位置:首页 > 数据库

写sql时经常会碰到条件不定的情况,这样的技巧受用无限

2015-01-19 18:03 369 查看
写sql时经常会碰到条件不定的情况,好多兄弟都是在哪儿无穷的拼接字符串,我也这样做过,太难弄了,老是搞错,后来用了这样的技巧受用无限:

原来的方法

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: