2012-05-24 10 views
20

nie mogę dowiedzieć się, dlaczego (a może po prostu nie może tego zrobić) otrzymuję out błędu zakresJak naprawić błąd "Należy zadeklarować zmienną skalarną" podczas odwoływania się do zmiennej tabeli?

Musi zadeklarować zmienną skalarną „@CompanyGroupSites_Master.

Tak jest to, że nie mogę uzyskać dostępu do zmiennej tabeli w ten sposób wewnątrz mojego kursora lub muszę coś przeoczyć prostą, która jest utrzymanie tej zmiennej tabeli poza zakresem gdy odwołanie od wewnątrz ciała kursorem?

DECLARE @TotalCompaniesToProcess int 
SET @TotalCompaniesToProcess = (select distinct Count(BusinessLine) from vwBuisinessUnit) 

IF(@TotalCompaniesToProcess > 0) 
BEGIN 

    ---------------- ############# SETUP ############# ---------------- 

    DECLARE @Companies TABLE (Company varchar(30))   
    Insert Into @Companies select distinct Company from Companies 

    DECLARE @CompanyGroups_Added TABLE(
             CompanyGroupDesc varchar(50), 
             size varchar(50) 
            ) 

    DECLARE @CompanyGroupSites_Added TABLE (
               CompanyGroupID int, 
               CompanyID varchar(12)          
              ) 

    DECLARE @CompanyGroupSites_Master TABLE (
               CompanyGroupID int, 
               CompanyID varchar(12) 
              ) 
    Insert into @CompanyGroupSites_Master select CompanyGroupID, CompanyID from Sec.CompanyGroupSites       

    DECLARE @CompanyGroupID int       
    DECLARE @Company int 

    ---------------- END SETUP ---------------- 

    ---------------- UPDATE THE COMPANIES ---------------- 

    DECLARE Companies_Cursor CURSOR FOR (select distinct BusinessLine from vwBuisinessUnit) 
    --select distinct BU, BusinessLine from vwBusinessUnit 

    Open Companies_Cursor 

    Fetch NEXT FROM Companies_Cursor into @Company 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 

     -- is there an existing CompanyGroup for this Organization? If not create it 
     SET @CompanyGroupID = (select CompanyGroupID from Sec.CompanyGroup 
           where size = 'Business' 
           and CompanyGroupDesc = @Company) 

     IF(@CompanyGroupID < 1) 
     BEGIN 
      INSERT INTO @CompanyGroups_Added ([CompanyGroupDesc], [Size]) 
      VALUES (@Company, 'Business') 

      SET @CompanyGroupID = @@IDENTITY 

      select @CompanyGroupID as CompanyGroupID_Added -- testing 
     END 

     Select ToDelete.* from (
      select CompanyGroupID, Company 
      from @CompanyGroupSites_Master 
      where @CompanyGroupSites_Master.CompanyGroupID = @CompanyGroupID) as ToDelete 

     delete from @CompanyGroupSites_Master where @CompanyGroupSites_Master.CompanyGroupID = @CompanyGroupID 

     Fetch NEXT FROM Companies_Cursor into @Company 
    END 


    CLOSE Companies_Cursor 
    DEALLOCATE Companies_Cursor 

END 
+3

dlaczego używasz kursora do tego? ANd, dlaczego oh, dlaczego używasz @@ tożsamości, gdy będziesz używać OUTPUT lub scope_identity() (@@ Tożsamość może powodować poważne problemy z integralnością danych i nie powinno być używane w ten sposób) – HLGEM

+0

teraz używając kursora, bo nie wiem T -SQL dla dziury w ziemi dla pętli iteracyjnych. Zmienię to na lepsze po tym, jak sprawię, że będzie działać. Cholera, już minęło trochę czasu, zapomniałem o scope_identity – PositiveGuy

+0

co mogłem użyć poza kursorem? Ponieważ nie robię po prostu jednej operacji crudnej, którą można wykonać w 2 linijce, aby zastąpić tę iteracyjną pętlę. Rada? – PositiveGuy

Odpowiedz

46

to long standing parser issue. Musisz pozbyć się prefiksu tabeli lub zawinąć go w nawiasy kwadratowe.

tj

delete from @CompanyGroupSites_Master 
where CompanyGroupID = @CompanyGroupID 

lub

delete from @CompanyGroupSites_Master 
where [@CompanyGroupSites_Master].CompanyGroupID = @CompanyGroupID 

Nie

delete from @CompanyGroupSites_Master 
where @CompanyGroupSites_Master.CompanyGroupID = @CompanyGroupID 
+2

duh mcfly. Dzięki. Nie jestem tak naprawdę mistrzem T-SQL, bardziej zwykłym facetem z procy prochu – PositiveGuy

+4

Dziękuję bardzo! Przez ostatnie kilka godzin wyrywam sobie włosy, próbując zrozumieć, dlaczego SQL uważa, że ​​moja zmienna tabeli jest niezadeklarowana! – CraigTP

Powiązane problemy