使用查询更改视图时的sql server 应用程序名称为Microsoft SQL Server Management Studio - Query,使用设计器更改视图时sql server 的应用程序名称为Microsoft SQL Server Management Studio。
您可以为 ALTER_VIEW 创建 DDL 触发器,以检查 APP_Name() 并限制您的用户使用查询而不是设计器。
CREATE TRIGGER LimitUseDesignerForView ON DATABASE
FOR ALTER_VIEW
AS
IF APP_NAME() = 'Microsoft SQL Server Management Studio'
BEGIN
RAISERROR ('Use query in order to alter your view',16, 1)
ROLLBACK
END
GO
您还可以通过以下查询获取使用设计器的 sql server 视图列表:
SELECT DISTINCT OBJECT_NAME(ep.major_id)
FROM sys.extended_properties ep
WHERE ep.name LIKE 'MS_DiagramPane%'
我建议您不要通过APP_NAME() 限制您的用户,因为用户可能会使用工具应用程序来使用视图设计器,例如 EMS 等。
您可以通过使用DDL_EXTENDED_PROPERTY_EVENTS DDL 触发器的限制来限制您的用户。
CREATE TRIGGER LimitUseDesignerForView ON DATABASE
FOR DDL_EXTENDED_PROPERTY_EVENTS
AS
IF (EVENTDATA().value('(/EVENT_INSTANCE/Parameters/Param)[1]','nvarchar(max)') LIKE 'MS_DiagramPane%') BEGIN
RAISERROR ('Use query in order to alter your view',16, 1)
ROLLBACK
End
GO