2016-08-10 6 views
0

からテーブルにレコードを挿入します。 SQL Serverを、SSMS 2008、T-SQLを使用してビュー

目標:私はそれが(たとえばselect * from VIEWのために)呼ばれるたびにVIEWを作成したい、基本的に現在の日時を示す別のテーブルにレコードを挿入します。この目的は、VIEWが呼び出される頻度を追跡することです。

私が試したこと:以下のVIEW擬似コードのようなものを実行しようとしましたが、失敗しました。

質問:この目標は可能ですか?

USE DATABASE 
GO 
/****** Object: View SCHEMA.VIEW1 Script Date: 08/10/2016 17:52:31 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE VIEW SCHEMA.VIEW1 AS 

--Step 1: Update the LogTable with the current datetime so I will know that the VIEW was called on this date/time 

INSERT INTO DATABASE.SCHEMA.LogTable (DATE) 
VALUES (GETDATE()) 

--Step 2: The "actual" VIEW code, select all records from TABLE1 (just as an example) 

SELECT * 
FROM DATABASE.SCHEMA.TABLE1 

GO 
+0

あなたはそこから選択することで、ビューを呼び出す必要がありますか?たとえば、ビューから選択してログテーブルに挿入して代わりに呼び出すプロシージャを作成することはできませんか? – ZLK

+0

@ZLKデータベースのすべての従業員に実行権限を与える必要がないプロシージャではなく、VIEWコードに 'insert into'を保持します。代わりに、LogTable専用の書き込み権限が与えられます。 – Chase

+0

私が知っている限り、それは実際には見ることができません。しかし、同じことをしても、ユーザに手続きの許可を与えることでどのような問題が起こるのか分かりません。 – ZLK

答えて

0

いいえ、これはできません。ビューはデータのみを読み取ることができます。

+0

にEXECUTEを与えるのと同様に、私はあなたがビューに挿入できないと言っていると思っていました。私は読み間違えた – scsimon

0

まず最初に、ビューを定義するときに別のテーブルにレコードを挿入することはできません。しかし、SERVER AUDITを作成してSELECTステートメントを監査することができます。次のようにクエリがあり、それに応じて変更してください:)

を「マスター」データベースでは、あなたのビューが存在するターゲット・データベースで

CREATE SERVER AUDIT [select_audit] 
TO FILE(FILEPATH='E:\folder_name\') 
WITH (ON_FAILURE=FAIL_OPERATION, QUEUE_DELAY=0); 

ALTER SERVER AUDIT [select_audit] WITH (STATE=ON); 

を、

CREATE DATABASE AUDIT SPECIFICATION [spec_test] 
FOR SERVER AUDIT [select_audit] 
ADD (SELECT ON OBJECT::[SCHEMAname].[VIEW name] BY [USER name]) 

が上の選択操作を実行します。あなたの表示

select * from dbo.view_test 

フォルダーとこのシステムテーブルをチェックしてログを確認してください情報。この情報を監査テーブルに挿入することもできます。

SELECT * FROM sys.server_file_audits 
SELECT * FROM sys.fn_get_audit_file('E:\folder_name\*', NULL, NULL); 
SELECT * FROM sys.dm_server_audit_status 

enter image description here

関連する問題