分页查询不返回任何内容

时间:2013-08-28 18:00:09

标签: sql tsql

我的查询是这样的,但它什么都不返回 @ value0,@ value1,@ value2,@ value3,@ field0 changable字段它们可以是空值或值取决于来自表单的参数。 例如,当我输入这些值时,它不会返回任何内容 @page = 1,@ size = 20,@ sort = N' Id',@ ts = N' DESC',@ field0 = N'名称',@ value2 = N& #39; 2000-1-1',@值3 = NULL,@ VALUE1 = NULL,@ value0 =空 我做错了什么?

           @page INT,
            @size INT,@sort nvarchar(50) ,
            @ts nvarchar(50) ,
            @totalrow INT  OUTPUT,
            @value0 nvarchar(50),
            @value1 nvarchar(50),
            @value2 nvarchar(50),
            @value3 nvarchar(50),
            @field0 nvarchar(50)

                AS
                BEGIN
                    DECLARE @offset INT
                    DECLARE @newsize INT
                    DECLARE @sql NVARCHAR(MAX)


                    IF(@page=0)
                begin
                SET @offset = @page;
                SET @newsize = @size
                end
                    ELSE 
                begin
                SET @offset = @page+1;
                SET @newsize = @size-1
                end

                    SET NOCOUNT ON;
              SET @sql = '
                     WITH OrderedSet AS
                    (
           SELECT Ks.Id,c.Name,c.CId,Ks.RegisterDate,ROW_NUMBER() 
    OVER (ORDER BY ' + @sort + ' '+@ts+') AS ''Index''
           FROM Ks LEFT  OUTER JOIN Car c On c.CId=Ks.CId WHERE  
          AND   (Ks.RegisterDate >'''+@value2+''' OR '''+@value2+''' IS NULL)
          AND (Ks.RegisterDate <'''+@value3+''' OR '''+@value3+''' IS NULL)
         AND (Ks.RegisterDate ='''+@value1+''' OR '''+@value1+''' IS NULL)
          AND ('+@field0+' LIKE ''%'+@value0+'%'' OR @value0 IS NULL)
         )
        SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' + 
CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize))

                   EXECUTE (@sql)

                   SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Ks])
                   print @sql

1 个答案:

答案 0 :(得分:1)

null连接到字符串时,结果为null

我在SQL syntax看到太多错误,我正在猜测这个错误。例如,如果@value(n) is not null其中一个@value(n)中的一个必须是NULL

我强烈建议您查看@sql值,然后更正其他错误。

接近null参数值的建议方法可能是:

@page INT,
            @size INT,@sort nvarchar(50) ,
            @ts nvarchar(50) ,
            @totalrow INT  OUTPUT,
            @value0 nvarchar(50),
            @value1 nvarchar(50),
            @value2 nvarchar(50),
            @value3 nvarchar(50),
            @field0 nvarchar(50)

                AS
                BEGIN
                    DECLARE @offset INT
                    DECLARE @newsize INT
                    DECLARE @sql NVARCHAR(MAX)


                    IF(@page=0)
                begin
                SET @offset = @page;
                SET @newsize = @size
                end
                    ELSE 
                begin
                SET @offset = @page+1;
                SET @newsize = @size-1
                end

                DECLARE @Ks_RegisterDate_Condition NVARCHAR(1000)

                IF (@value1 IS NULL AND @value2 IS NULL AND @value3 IS NULL)
                BEGIN
                    SET  @Ks_RegisterDate_Condition = N'KsRegisterDate IS NULL'
                END
                ELSE
                BEGIN
                    IF (@value1 IS NOT NULL)
                    BEGIN
                        SET  @Ks_RegisterDate_Condition = N'(Ks.RegisterDate ='''+@value1+''''
                    END
                    IF (@value2 IS NOT NULL)
                    BEGIN
                        SET  @Ks_RegisterDate_Condition = N'(Ks.RegisterDate >'''+@value2+''''
                    END
                    IF (@value3 IS NOT NULL)
                    BEGIN
                        SET  @Ks_RegisterDate_Condition = N'(Ks.RegisterDate >'''+@value3+''''
                    END
                END

                IF (NOT (@field0 IS NULL OR @value0 IS NULL ) )
                BEGIN
                    SET  @Ks_RegisterDate_Condition +=  + N'AND ' + @field0+N' LIKE ''%'+@value0+N'%'''
                END 

                    SET NOCOUNT ON;
              SET @sql = '
                     WITH OrderedSet AS
                    (
           SELECT Ks.Id,c.Name,c.CId,Ks.RegisterDate,ROW_NUMBER() 
    OVER (ORDER BY ' + @sort + ' '+@ts+') AS ''Index''
           FROM Ks LEFT  OUTER JOIN Car c On c.CId=Ks.CId WHERE  ' + 
          @Ks_RegisterDate_Condition + '
         )
        SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' + 
CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize))

                   print @sql
                   EXECUTE (@sql)

                   SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Ks])