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