栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

简单的T-SQL而不是触发器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单的T-SQL而不是触发器

我不确定

BEGINTRY
块的意义是什么。很明显,您想确保有一个
Role
命名
Author
-但是您真的需要每次在触发器中检查它吗?您现在可以填充它,而不必再次检查吗?

  • 创建/更改/引用对象时,请始终使用架构前缀。
  • BEGIN/END
    在模块主体周围添加了适当的包装,并添加了
    SET NOCOUNT ON;
  • 我更改
    COUNT(*) from inserted
    IF EXISTS
    。当您真的不在乎它是1还是10或6000时,没有理由去烦恼实际计数。
  • 我从中删除了使用变量作为值的方法
    inserted
    。正如@marc_s指出的那样,您不能依赖于此,因为触发器是按 语句 而不是按 触发的。因此,如果您有一个多行插入,那么您现有的触发器将只处理过任意一行。
  • 我删除了
    TRY/CATCH
    块。在大多数情况下,比起让SQL Server为您进行检查,您自己检查违例更为有效,尤其是在触发器中,因为这样做不仅会影响触发代码,而且还会影响外部事务(如您所见) 。尤其是在您的情况下,此触发器第一次运行后可能每次都会引发异常。
  • 我不得不猜测的列名称

    Author
    。请始终在
    SELECt
    INSERT
    语句中包括您的列列表。除了该文章中指出的原因外,它还使其他人可以更轻松地帮助您重新编写代码。

    CREATE TRIGGER dbo.AuthorInsert ON dbo.Author INSTEAD OF INSERT
    AS
    BEGIN
    SET NOCOUNT ON;
    IF EXISTS (SELECT 1 FROM inserted)
    BEGIN
    DECLARE @emps TABLE(id INT, NameID INT);
    DECLARE @RoleID INT;
    SELECt @RoleID = RoleID FROM dbo.Roles WHERe RoleName = ‘Author’;

    IF @RoleID IS NULLBEGIN  -- probably not necessary to do this over and over again  -- unless someone is sabotaging your Roles table.  INSERT dbo.Roles(RoleName) SELECt 'Author';  SELECT @RoleID = SCOPE_IDENTITY();ENDINSERT dbo.Employee(NameID, ReestrCodeID, RoleID, PassportDataID,   AddressID, PhoneID) OUTPUT inserted.EmployeeID, inserted.NameID   INTO @emps SELECT NameID, ReestrCodeID, @RoleID, PassportDataID,    AddressID, PhoneID FROM inserted;-- this seems redundant. If an author is linked to an employee, -- why do we need to store all of this information again?INSERT dbo.Author(EmployeeID, NameID, ReestrCodeID, RoleID,   PassportDataID, AddressID, PhoneID)  SELECt e.id, i.NameID, i.ReestrCodeID, @RoleID,     i.PassportDataID, i.AddressID, i.PhoneID FROM @emps AS e    INNER JOIN inserted AS i ON e.NameID = i.NameID;

    END
    END
    GO



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号