Есть ли способ отследить изменения от представлений в MS Sql Server? - PullRequest
0 голосов
/ 09 апреля 2019

Я ищу, как отслеживать изменения из представления в MS Sql-Server 2012. И роль пользователя, выполняющего вход, - Public.Так что это сложно сделать.

Например, при условии, что есть схема.

CREATE TABLE [dbo].[USER_CREDENTIAL](
    [USERID] [nvarchar](48) NOT NULL,
    [VALID_FROM] DATETIME NULL,
    [EXPIRED_AT] DATETIME NULL, 
    [CREDENTIAL_ID] int NOT NULL,
    CONSTRAINT [UNIQUE_USERID] PRIMARY KEY CLUSTERED( [USERID] ASC)
) ; 


CREATE VIEW [VIEW_OF_USER_CREDENTIAL] as 
SELECT * FROM dbo.[USER_CREDENTIAL];

Может быть разрешен только доступ к представлению.Представление будет изменено, когда некоторые данные будут вставлены / обновлены / удалены в USER_CREDENTIAL.Я сделаю запрос к представлению.

Я видел документ .Я пытался это сделать, но целью для отслеживания является таблица данных, а для входа в систему отсутствует роль.Я получил сообщение об ошибке.

Object 'foo' is of a data type that is not supported by the CHANGETABLE function. The object must be a user-defined table.

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

CREATE TABLE dbo.[CHANGES_FROM_A_VIEW] (
    [VERSION] [int] IDENTITY(1,1) NOT NULL, 
    [USERID] [nvarchar](48) NOT NULL, 
    CONSTRAINT [UNIQUE_VERSION] PRIMARY KEY CLUSTERED ( [VERSION] ASC) 
)

CREATE TRIGGER [SOMETHING_CHANGED] ON dbo.[VIEW_OF_USER_CREDENTIAL] ... 

ALTER DATABASE database_name
SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON)

ALTER TABLE [CHANGES_FROM_A_VIEW]
ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)

SELECT * FROM CHANGETABLE(CHANGES dbo.CHANGES_FROM_A_VIEW, 0) AS C

Кто-нибудь знает какой-нибудь способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...