2016-07-25 8 views
0

Ich erhalte diesen Fehler> Ein TOP N oder FETCH rowcount Wert darf nicht negativ sein.Fehler in meinem Code: Ein TOP N oder FETCH rowcount Wert darf nicht negativ sein

Ich bekomme diesen Fehler in diesem Abschnitt des Codes. Bitte Hilfe >>

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 ='''[email protected]_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 '''[email protected]_Date+''' and '''[email protected]_Date+''' and H.Holiday_Status=''0'') 
      Where U.User_Status=1 
      Group By 
      U.User_Code)A6 On (A6.User_Code = A5.User_Code) 
+0

Sie können nicht einfach so in der Mitte der Abfrage und durch in einer IF-Anweisung zu stoppen. Und was in der Welt sind diese lächerlichen Verbindungen wo 1 = 1 ??? Haben Sie von Kreuzverbindungen gehört? Das klingt nach dem, was Sie stattdessen wollen. Sie können auch diesen Artikel lesen, bevor Sie fortfahren, Ihre Datenbank mit Nolock-Hinweisen zu überziehen. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ Die Formatierung macht es fast unmöglich, das meiste davon zu entziffern. –

+0

Sieht aus wie ein Teil der dynamischen SQL-Konstruktion. Überprüfen Sie Anführungszeichen und Klammern. – Serg

+0

Glaubst du, dass die Fehlermeldung über zwei Features ('TOP' und' FETCH') spricht und dein Beispielcode * weder * enthält, dass du die Quelle deiner Fehler möglicherweise nicht richtig isoliert hast? Versuchen Sie, eine Menge Lärm hier zu vermeiden, wenn Sie Hilfe benötigen (z. B. erhalten Sie den gleichen Fehler, wenn Sie nur eine Spalte statt 20 auswählen?) –

Antwort

0

sieht aus wie das Problem hier mit der Syntax ist,

Set @Ins_Tbl = @Ins_Tbl + 'And D.Division_Name ='''[email protected]_Name+''' ' 

Sie ein Leerzeichen zwischen "haben sollte und Und wie

Set @Ins_Tbl = @Ins_Tbl + ' And D.Division_Name ='''[email protected]_Name+''' ' 

versuchen Sie es, wenn diese funktioniert

Verwandte Themen