使用: SQL Server,SSMS 2008,T-SQL
目标:我想创建一个VIEW,无论何时调用它(例如select * from 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 :(得分:0)
不,这是不可能的。视图只能读取数据。
答案 1 :(得分: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);
在存在VIEW的目标数据库中,
CREATE DATABASE AUDIT SPECIFICATION [spec_test]
FOR SERVER AUDIT [select_audit]
ADD (SELECT ON OBJECT::[SCHEMAname].[VIEW name] BY [USER name])
在VIEW上执行选择操作
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