1

WITHこれは少しばかげた質問かもしれませんが、ステートメントがいつ起動するかを正確に確認したかっただけです。これは、例を使用して説明するのがおそらく最も適切です。下部にビューがあります。

ビューは XML ノードから必要な情報を抽出して、レポートや画面などに簡単に表示できるようにします。日付範囲またはテーブル名を渡してこのビューを呼び出すだけです。

私の質問は、このビューがいつ呼び出されるかです...

select * 
from [Core].[vw_DBAudit] 
where TableName = 'CorporateActions' 

WITHステートメントは次のレコードに対してのみ実行されますか、TableName = 'CorporateActions'それともすべてのレコードに対して実行されますか。つまり、テーブル内のすべてのレコードの XML ノードを削除するか、tablename = 'CorporateActions'? 私の懸念は、必要以上の仕事をしているということです。すべてのレコードに対して実行される場合は、WITHステートメントを削除して、select としてコーディングするだけです。このコードは他の人によって書かれているので、彼らに戻る前に確認したいと思います。

CREATE VIEW [Core].[vw_DBAudit]
AS
WITH AuditTable
AS
(
SELECT
     r.Actions
    ,r.CreatedBy
    ,r.WhenCreated
    ,r.WhenModified
    ,r.TableName
    ,r.EntityKey
    ,r.UserId
    ,r.RevisionStamp
    ,(SELECT u.UserName FROM aspnet_Users u WHERE u.UserId = r.UserId) AS UserName  
    ,a.changeddata.value('Property[1]', 'varchar(100)')  AS Property
    ,a.changeddata.value('OldValue[1]', 'varchar(100)')  AS OldValue
    ,a.changeddata.value('NewValue[1]', 'varchar(100)')  AS NewValue
    ,a.changeddata.value('(OldValue/@xsi:type)[1]','varchar(30)')  AS OldValueDataType
    ,a.changeddata.value('(NewValue/@xsi:type)[1]','varchar(30)')  AS NewValueDataType  

FROM 
    Core.DBAudit r
    cross apply r.[ChangedColumns].nodes('/ArrayOfModifiedProperty/ModifiedProperty') as a(changeddata)
)

SELECT 
     r.*
    ,CASE WHEN  r.OldValueDataType = 'xsd:dateTime' THEN        
           CONVERT(DATETIME, substring(r.OldValue,1,19)) 
     ELSE
       null 
     END  as 'OldDateValue'      
    ,CASE WHEN  r.NewValueDataType = 'xsd:dateTime'  THEN         
           CONVERT(DATETIME, substring(r.NewValue,1,19)) 
     ELSE
        null
     END  as 'NewDateValue'   
 FROM  AuditTable r
4

1 に答える 1