2016-08-10 4 views
0

Использование: SQL Server, SSMS 2008, T-SQLВставьте запись в таблицу из VIEW

Цель: Я хочу, чтобы создать VIEW, где каждый раз, когда она вызывается (например select * from 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 Я хочу сохранить 'insert into' в коде VIEW, а не процедуру, которая не должна предоставлять разрешения на выполнение для всех сотрудников в базе данных. Вместо этого им будут предоставлены права на запись в LogTable. – Chase

+0

Ну, на мой взгляд, это не реально, насколько мне известно. Но я не уверен, что проблема будет заключаться в предоставлении пользователям разрешения на процедуру, если она делает то же самое. – ZLK

ответ

0

Нет, это невозможно. Представления могут читать только данные.

+0

, я думал, вы говорите, что не можете вставить в представление. Я неправильно читаю – 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

Смежные вопросы