1

テーブル オブジェクトを使用して列を挿入したストアド プロシージャを作成しました。以下に手順を示します。

CREATE Procedure [dbo].[usp_Security] (@CredentialsList dbo.Type_UserCredentialsList ReadOnly) As        
Begin        
  Declare        
    @Result Table        
(  

   IdentityColumn Int NOT NULL Identity (1, 1) PRIMARY KEY,    
   UserCredentials  nVarChar(4000),        
   UserName         nVarChar(100),        
   UserRole         nVarChar(200),
   RoleID           Int,    
   Supervisor       Char(3),        
   AcctMaintDecn    Char(3),        
   EditPendInfo     Char(3),        
   ReqInstID        Char(3)
)

Insert Into @Result     
 Select Distinct UserCredentials, 'No', D.RoleName, D.RoleID,'No', 'No', 'No' From @CredentialsList A    
 Join SecurityRepository.dbo.SecurityUsers B On CharIndex(B.DomainAccount, A.UserCredentials) > 0        
 Join SecurityRepository.dbo.SecurityUserRoles C On C.UserID = B.UserID        
 Join SecurityRepository.dbo.SecurityRoles D On D.RoleID = C.RoleID      
 Where D.RoleName Like 'AOT.%' And B.IsActive = 1 And D.IsActive = 1  

Update A        
 Set A.UserName = B.UserName      
 From @Result A        
 Join @CredentialsList B On A.UserCredentials = B.UserCredentials      

-- "Supervisor" Column        
Update A        
Set A.Supervisor = 'Yes'        
From @Result A        
Join SecurityRepository.dbo.SecurityUsers B On CharIndex(B.DomainAccount, A.UserCredentials) > 0        
Join SecurityRepository.dbo.SecurityUserRoles C On C.UserID = B.UserID        
Join SecurityRepository.dbo.SecurityRoles D On D.RoleID = C.RoleID        
Where D.RoleName In ('AOT.Manager', 'AOT.Deps Ops Admin', 'AOT.Fraud Manager', 'AOT.Fulfillment Manager') 
     And B.IsActive = 1 And D.IsActive = 1

-- Return Result        
Select * From @Result Order By UserName, UserRole    
End

上記の手順では、Table オブジェクトを使用し、そのテーブル オブジェクトにクラスター化インデックスを作成しました。

ただし、一時テーブルを作成して SP で上記の情報を処理すると、一時テーブルの代わりにテーブル オブジェクトを使用するよりも高速になります。テーブル オブジェクトの列に別のクラスター化インデックスを作成しようとしましたが、テーブル オブジェクトにインデックスを作成できないため、作成できません。

上記のストアド プロシージャで一時テーブルを使用したかったのですが、テーブル オブジェクトを使用するよりもコストが削減されますか。

4

1 に答える 1