2012-02-06 88 views
2

我需要爲下表所示的表創建聚簇索引和非聚簇索引。當我嘗試創建臨時表的索引時,它的工作正常。當我嘗試爲此表創建索引時,它會引發語法錯誤。爲存儲過程中創建的表添加索引

DECLARE @SearchReviseBudget TABLE(   
    id     INT IDENTITY(1, 1),   
    fundid    BIGINT,   
    programid   BIGINT ,   
    projectid   BIGINT,   
    applicationnumber VARCHAR(50),   
    applicationname VARCHAR(100),   
    startdate   DATETIME,   
    enddate   DATETIME,   
    programtypeidfkid VARCHAR(50),   
    applicationbudget MONEY,   
    utlized   MONEY ,  
    [Left]    MONEY,   
    companyname  VARCHAR(100),   
    multiyearbudgetid BIGINT,   
    totalprogrambudget MONEY)   

    ---inserting sum of amount for projects       
    INSERT INTO @SearchReviseBudget   
       (programid,   
       fundid,   
       utlized)   
    SELECT programid,   
     fundid,   
     SUM([Utilized])   
    FROM dbo.getapplicationbudgetandutilized   
    WHERE fundid IN(SELECT pkid              
       FROM fundrequestheader          
     WHERE pkid IN (select pkid from @TempInvoice         

      ))    

     AND programid IN (SELECT programidfkid   
          FROM usermaster u,   
            programaccountconfiguration pac   
          WHERE   
      u.accountcontactidfkid = pac.acccontactidfkid   
      AND pac.accountidfkid = (SELECT accountidfkid   
             FROM accountcontacts   
             WHERE   
       pkid IN (@AccContactPKID)   
            )   
      AND u.isactive = 1   
      AND pac.isactive = 1   
      AND u.accountcontactidfkid IN (SELECT contactid   
              FROM   
       #tempcontactid))   
     --and ProjectID not in (select pkid from installationtransactionheader where parentprjnumber is null and isnull(paymentschedule,0)=1)            
     AND [Left] > 0.00   
    GROUP BY fundid,   
      programid   
+0

是MS SQLServer嗎?你有什麼錯誤? – Mat 2012-02-06 09:14:06

回答

2

可以隱含創建表變量指標作爲唯一約束的一部分。

下面將創建與其他答案中完全相同的索引(除了將CI聲明爲唯一的,其中省略)。儘管UNIQUE(fundid, startdate,id)看起來好像在該答案的第二個索引中包含了一個額外的鍵列,但它將隱式包含在那裏,因爲聚簇索引鍵包含在所有非唯一非聚簇索引的鍵級別上。

DECLARE @SearchReviseBudget TABLE(   
    id     INT IDENTITY(1, 1) PRIMARY KEY,   
    fundid    BIGINT,   
    programid   BIGINT ,   
    projectid   BIGINT,   
    applicationnumber VARCHAR(50),   
    applicationname VARCHAR(100),   
    startdate   DATETIME,   
    enddate   DATETIME,   
    programtypeidfkid VARCHAR(50),   
    applicationbudget MONEY,   
    utlized   MONEY ,  
    [Left]    MONEY,   
    companyname  VARCHAR(100),   
    multiyearbudgetid BIGINT,   
    totalprogrambudget MONEY , 
    UNIQUE(fundid, startdate,id) 
    ) 

這就是說表變量沒有維持他們比總行數等統計數據(以及你需要使用OPTION (RECOMPILE)爲使用),所以#temp表往往是一個更好的選擇呢。

+0

非常感謝你......它的工作...... :) – Prakash 2012-02-06 11:51:01