2012-02-06 11 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

答えて

2

あなたは、暗黙的にユニーク制約の一部として、テーブル変数のインデックスを作成することができます。

以下は、他の回答とまったく同じ索引を作成します(ただし、CIはそこでは除外されている固有のものとして宣言されています)。 UNIQUE(fundid, startdate,id)には、その応答の2番目の索引には存在しない追加のキー列が含まれているように見えますが、クラスタ化された索引キーがすべての一意でない非クラスター化索引のキー・レベルに含まれているため暗黙的にそこに含まれます。テーブル変数は、総行数以外のそれらのための維持は統計情報を持っていない(とあなたが使用されるように、そのためのOPTION (RECOMPILE)を使用する必要がある)ので、#tempテーブルはとにかく多くの場合、より良い選択であると述べ

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) 
    ) 

+0

非常にありがとう...それは働いた... :) – Prakash

関連する問題