- SQL code
/** * 根据符合条件查询文章数据 @vType 视图类别,1为大类文章视图vNewsMST,2为专题文章视图vSpecMST @SortID @SpecID @GroupsID @NewsTitle @CreateDateBegin @CreateDateEnd */ALTER PROCEDURE [dbo].[NewsListSelectByCondition] ( @vType int, @SortID varchar(12), @SpecID varchar(12), @GroupsID varchar(12), @NewsTitle varchar(120), @CreateDateBegin datetime, @CreateDateEnd datetime, @PageSize int, @CurrentPage int output, @TotalPage int output, @TotalRecord int output, @SortBy varchar(100) )AS--把所有单引号都替换成两个单引号SET @SortID = REPLACE(LTRIM(RTRIM(@SortID)),'''','''''')SET @SpecID = REPLACE(LTRIM(RTRIM(@SpecID)),'''','''''')SET @GroupsID = REPLACE(LTRIM(RTRIM(@GroupsID)),'''','''''')SET @NewsTitle = REPLACE(LTRIM(RTRIM(@NewsTitle)),'''','''''')SET @SortBy = REPLACE(LTRIM(RTRIM(@SortBy)),'''','''''')IF @SortBy=''BEGIN SET @SortBy='NewsID DESC'ENDDECLARE @Sql NVARCHAR(2000)DECLARE @SqlCount NVARCHAR(2000)DECLARE @WhereClause NVARCHAR(2000)--判断是专题文章还是系统文章,1为系统文章,2为专题文章IF @vType ='1'BEGINSET @Sql = 'SELECT *,ROW_NUMBER() OVER (ORDER BY ' + @SortBy + ') AS RowID FROM [dbo].[vNewsMST] 'SET @SqlCount = 'SELECT @Count=count(*) FROM [dbo].[vNewsMST] 'ENDELSE IF @vType ='2'BEGINSET @Sql = 'SELECT *,ROW_NUMBER() OVER (ORDER BY ' + @SortBy + ') AS RowID FROM [dbo].[vSpecMST] 'SET @SqlCount = 'SELECT @Count=count(*) FROM [dbo].[vSpecMST] 'ENDSET @WhereClause = 'WHERE DeleteFlag=0 'IF RTrim(@SortID)<>'' SET @WhereClause = @WhereClause + ' AND SortID=''' + @SortID + '''' SET @WhereClause = @WhereClause + ' OR SortID LIKE ''' + @SortID + '%'''IF RTrim(@SpecID)<>'' SET @WhereClause = @WhereClause + ' AND SpecID=''' + @SpecID + ''''IF RTrim(@GroupsID)<>'' SET @WhereClause = @WhereClause + ' AND GroupsID=''' + @GroupsID + ''''[color=#FF0000]IF RTrim(@NewsTitle)<>'' SET @WhereClause = @WhereClause + ' AND NewsTitle LIKE ''%' + @NewsTitle + '%'''[/color]IF RTrim(@CreateDateBegin)<>Cast('1900-1-1' AS DateTime) SET @WhereClause = @WhereClause + ' AND AddDate>=''' + Cast(@CreateDateBegin AS VARCHAR(30)) + ''''IF RTrim(@CreateDateEnd)<>Cast('1900-1-1' AS DateTime) SET @WhereClause = @WhereClause + ' AND AddDate<=''' + Cast(@CreateDateEnd AS VARCHAR(30)) + ''''SET @SqlCount = @SqlCount + @WhereClauseDECLARE @ParmDefinition nvarchar(100)SET @ParmDefinition = [email protected] int OUTPUT';EXECUTE sp_executesql @SqlCount, @ParmDefinition, @[email protected] OUTPUT;SET @TotalPage=CEILING(CAST(@TotalRecord AS DECIMAL)[email protected])IF @CurrentPage > @TotalPage-1 SET @[email protected]IF @CurrentPage < 0 SET @CurrentPage=0DECLARE @_Start INT, @_End INTSET @_Start = ((@CurrentPage * @PageSize) + 1)SET @_End = (@_Start + @PageSize - 1)SET @Sql = 'SELECT * FROM (' + @Sql + @WhereClause + ') AS TempTable WHERE (RowID >= ' + CAST(@_Start AS VARCHAR(10)) + ') AND (RowID <= ' + CAST(@_End AS VARCHAR(10)) + ')'EXEC sp_executesql @Sql
我的分类结构是
001
001001
001002
001003
002
002001
002002
002003
003
……
很简单的!所以我起初就想用
- SQL code
IF RTrim(@SortID)<>'' SET @WhereClause = @WhereClause + ' AND SortID=''' + @SortID + '''' SET @WhereClause = @WhereClause + ' OR SortID LIKE ''' + @SortID + '%'''
将
001
001001
001002
001003
下的文章都检索出来匹配,检索出需要的文章,如果用
SET @WhereClause = @WhereClause + ' AND SortID='001''只能检索出父类的文章,却检索不出
001001
001002
001003
下面的文章,不知道怎么办,有没有哪位大哥帮忙下!万分感谢
------解决方案--------------------
- SQL code
--BOM算法--产品配件清单查询示例(邹建)CREATE TABLE Item(ID int,Name varchar(10),Wast decimal(2,2))INSERT Item SELECT 1,N'A产品',0.01UNION ALL SELECT 2,N'B产品',0.02UNION ALL SELECT 3,N'C产品',0.10UNION ALL SELECT 4,N'D配件',0.15UNION ALL SELECT 5,N'E物料',0.03UNION ALL SELECT 6,N'F物料',0.01UNION ALL SELECT 7,N'G配件',0.02CREATE TABLE Bom(ItemID int,ChildId int)INSERT Bom SELECT 1,4UNION ALL SELECT 1,7 --A产品由D配件和G配件组成UNION ALL SELECT 2,1UNION ALL SELECT 2,6UNION ALL SELECT 2,7 --B产品由F物料及G配件组成UNION ALL SELECT 4,5UNION ALL SELECT 4,6 --D配件由F物料组成UNION ALL SELECT 3,2UNION ALL SELECT 3,1 --C产品由A产品和B产品组成GOCREATE FUNCTION f_Bom(@ItemIDs varchar(1000), --要查询物料清单及生产量的产品编号列表(逗号分隔)@Num int --要生产的数量)RETURNS @t TABLE(ItemID int,ChildId int,Nums int,Level int)ASBEGIN DECLARE @Level int SET @Level=1 INSERT @t SELECT a.ItemID,a.ChildId,ROUND(@Num/(1-b.Wast),0),@Level FROM Bom a,Item b WHERE a.ChildId=b.ID AND CHARINDEX(','+RTRIM(a.ItemID)+',',',[email protected]+',')>0 WHILE @@ROWCOUNT>0 and @Level<140 BEGIN SET @[email protected]+1 INSERT @t SELECT a.ItemID,b.ChildId,ROUND(a.Nums/(1-c.Wast),0),@Level FROM @t a,Bom b,Item c WHERE a.ChildId=b.ItemID AND b.ChildId=c.ID AND [email protected] END RETURNENDGO--调用函数展开产品1、2、3的结构及计算生产10个产品时,各需要多少个配件SELECT a.ItemID,ItemName=b.Name, a.ChildId,ChildName=c.Name, a.Nums,a.LevelFROM f_Bom('1,2,3',10) a,Item b,Item cWHERE a.ItemID=b.ID AND a.ChildId=c.IDORDER BY a.ItemID,a.Level,a.ChildId/*ItemID ItemName ChildId ChildName Nums Level----------- ---------- ----------- ---------- ----------- -----------1 A产品 4 D配件 12 11 A产品 7 G配件 10 11 A产品 5 E物料 12 21 A产品 6 F物料 12 22 B产品 1 A产品 10 12 B产品 6 F物料 10 12 B产品 7 G配件 10 12 B产品 4 D配件 12 22 B产品 7 G配件 10 22 B产品 5 E物料 12 32 B产品 6 F物料 12 33 C产品 1 A产品 10 13 C产品 2 B产品 10 13 C产品 1 A产品 10 23 C产品 4 D配件 12 23 C产品 6 F物料 10 23 C产品 7 G配件 10 23 C产品 7 G配件 10 23 C产品 4 D配件 12 33 C产品 5 E物料 12 33 C产品 6 F物料 12 33 C产品 7 G配件 10 33 C产品 5 E物料 12 43 C产品 6 F物料 12 4