我试图想出一种方法来阻止分析师在没有主键的情况下创建表格。我知道如何创建一个数据库级别的触发器,我知道如何查询以查找一个表是否有一个主键,但我希望SQL Server有一个'创建'表,与插入' /'更新'的方式大致相同。 ON INSERT / ON UPDATE触发器中使用的表。
假设,如果SQL Server确实有这个'创建'表,我的触发器看起来像这样:
CREATE TRIGGER PKViolations
ON DATABASE
FOR CREATE_TABLE
AS
IF EXISTS (SELECT 1
FROM Created
WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0)
BEGIN
PRINT 'Please include a Primary Key. Transaction has been rolled back.'
ROLLBACK;
END
指导分析师对主键的重要性有所帮助,但是在没有PK的情况下仍然可以创建表格,非常感谢任何见解!
答案 0 :(得分:0)
您可以使用EVENTDATA()来获取ObjectName。然后,您可以使用查询来检查是否存在主键。
SELECT NewTableName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)')
您可以在此处详细了解EVENTDATA。 https://docs.microsoft.com/en-us/sql/t-sql/functions/eventdata-transact-sql
这是一个功能齐全的例子:
CREATE TRIGGER PKViolations
ON DATABASE
FOR CREATE_TABLE
AS
declare @NewTableName nvarchar(255)
SELECT @NewTableName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)')
IF OBJECTPROPERTY(OBJECT_ID(@NewTableName),'TableHasPrimaryKey') = 0
BEGIN
PRINT 'Please include a Primary Key. Transaction has been rolled back.'
ROLLBACK;
END
go