我的代码出错:TOP N或FETCH行数值可能不是负数

时间:2016-07-25 13:27:01

标签: sql sql-server sql-server-2008

我收到此错误> TOP N或FETCH行数值可能不是负数。

我在代码的这一部分中收到此错误。请帮助>>

Select 
            A2.Employee_Name,
            A2.User_Name,
            A2.User_Code,
            A2.User_Type_Name,
            A2.Region_Name,
            A2.Region_Code,
            A2.Division_Name,
            [A3.Day_Count]-[A2.Sunday]-[A2.Holiday] "Total_Days",
            IsNull(A4.Reported_Days,0) "Reported_Days",
            IsNUll((A5.Non_Reported_Days)-IsNull((A6.Holiday_Count),0),0) "Non_Reported_Days",
            Round((Convert(Float,(A4.Reported_Days))/Convert(Float,((A3.Day_Count)-(A2.Sunday)-(A2.Holiday)))*100),0) "Percentage"
            From
            (
            Select 
            A1.Employee_Name,
            A1.User_Name,
            A1.User_Code,
            A1.User_Type_Name,
            A1.Region_Name,
            A1.Region_Code,
            A1.Division_Name,
            Sum(Case When A1.Days = 1 And A1.Holiday = ''0'' Then 1 Else 0 End) "Sunday",
            Sum(Case When A1.Holiday <> ''0'' Then 1 Else 0 End) "Holiday"
            From
            (
            Select 
            E.Employee_Name,
            U.User_Code,
            U.User_Name,
            UT.User_Type_Name,
            R.Region_Name,
            R.Region_Code,
            D.Division_Name,
            Datepart(W,D1.Date_Val) "Days",
            IsNull(H.Holiday_Name,0)"Holiday"
            From
            Tbl_Sfa_User_Master U With(Nolock)
            Inner Join Tbl_Sfa_Employee_Master E With(Nolock) On (E.Employee_Code = U.Employee_Code)
            Inner Join Tbl_Sfa_User_Type_Master UT With(Nolock) On (UT.User_Type_Code = U.User_Type_Code and  UT.User_Type_Category <> ''NON_FIELD_USER'')
            Inner Join Tbl_Sfa_Region_Master R With(Nolock) On (R.Region_Code = U.Region_Code And R.Region_Status=1)
            Inner Join Tbl_Sfa_Division_Entity_Mapping DE With(Nolock) On (DE.Entity_Code = U.User_Code And DE.Entity_Type=''User'')
            Inner Join Tbl_Sfa_Division_Master D With(Nolock) On (D.Division_Code = DE.Division_Code And D.Record_Status=1'

            If @Division_Name <> ''

            Set @Ins_Tbl = @Ins_Tbl + 'And D.Division_Name ='''+@Division_Name+''' '

            Set @Ins_Tbl = @Ins_Tbl +')

            Inner Join @DW D1 On (1=1)
            Left Outer Join Tbl_Sfa_Holiday_Master H With(Nolock) On (H.Region_Code = R.Region_Code and Convert(Date,H.Holiday_Date) = D1.Date_Val And H.Holiday_Status = 0)
            Where U.User_Status=1
            )A1
            Group By
            A1.Employee_Name,
            A1.User_Code,
            A1.User_Name,
            A1.User_Type_Name,
            A1.Region_Name,
            A1.Region_Code,
            A1.Division_Name)A2
            Left Outer Join
            (Select 
            B.User_Code,
            Count(A.Date_Val) "Day_Count"
            From
            @DW A
            Inner Join Tbl_Sfa_User_Master B With(Nolock) On (1=1)
            Where B.User_Status=1
            Group By B.User_Code) A3 On (A3.User_Code = A2.User_Code)
            Left Outer Join 
            (Select 
            U.User_Code,
            Count(Distinct D.DCR_Code) "Reported_Days"
            From 
            @R_Days A 
            Inner Join Tbl_sfa_User_Master U With(Nolock) On (1=1)
            Inner Join Tbl_Sfa_User_Type_Master UT With(Nolock) On (UT.User_Type_Code = U.User_Type_Code And User_Type_Category <> ''NON_FIELD_USER'')
            Inner Join Tbl_Sfa_DCR_Master D With(Nolock) On (D.User_Code = U.User_Code And D.DCR_Actual_Date = A.Date_Val And D.DCR_Status In (''1'',''2''))
            Where U.User_Status=1
            Group By U.User_Code)A4 On (A4.User_Code = A2.User_Code)
            Left Outer Join 
            (Select 
            U.User_Code,
            Sum(Case When A.Date_Val=D.DCR_Actual_Date Then 0 Else 1 End) "Non_Reported_Days"
            From 
            @R_Days A 
            Inner Join Tbl_sfa_User_Master U With(Nolock) On (1=1)
            Inner Join Tbl_Sfa_User_Type_Master UT With(Nolock) On (UT.User_Type_Code = U.User_Type_Code And User_Type_Category <> ''NON_FIELD_USER'')
            Left Outer Join Tbl_Sfa_DCR_Master D With(Nolock) On (D.User_Code = U.User_Code And D.DCR_Actual_Date = A.Date_Val And D.DCR_Status In (''1'',''2''))
            Where U.User_Status=1
            Group By U.User_Code)A5 On (A5.User_Code = A2.User_Code)
            Left Outer Join 
            (Select 
            U.User_Code,
            Count(H.Holiday_Code) "Holiday_Count"
            From
            Tbl_Sfa_User_Master U
            Inner Join Tbl_Sfa_Region_Master R On (R.Region_Code = U.Region_Code And R.Region_Status=1)
            Inner Join Tbl_Sfa_Holiday_Master H On (H.Region_Code = R.Region_Code And H.Holiday_Date Between '''+@Start_Date+''' and '''+@End_Date+''' and H.Holiday_Status=''0'')
            Where U.User_Status=1
            Group By 
            U.User_Code)A6 On (A6.User_Code = A5.User_Code)

1 个答案:

答案 0 :(得分:0)

看起来问题就在这里,语法

Set @Ins_Tbl = @Ins_Tbl + 'And D.Division_Name ='''+@Division_Name+''' '

你应该在&#39;之间留一个空格。和,作为,

Set @Ins_Tbl = @Ins_Tbl + ' And D.Division_Name ='''+@Division_Name+''' '

如果有效,请尝试

相关问题