SQL Server2008触发器优化执行效率

yuanyuchao111 2017-08-31 10:06:28
我在表dbo.MFGROU里新增了id和reftype两个字段,并做了一个触发器,但是执行效率非常的慢。触发器的作用是每当表dbo.MFGROU中插入数据时,这两个字段会自动获取表dbo.REFDEFINE中的autoid和REFTYP字段的值,(根据表dbo.MFGROU中ROUNAM与表dbo.REFDEFINE中的REFNAM来匹配id)。ps:因为只获取表dbo.REFDEFINE中REFTYP=‘工艺’时的id值,所以其实reftype的值固定是工艺。
下面是两张表:
表dbo.MFGROU

表dbo.REFDEFINE

下面是我写的触发器
create trigger M
on dbo.MFGROU
for insert
as
begin
update dbo.MFGROU set id=(
select autoid from dbo.REFDEFINE where REFNAM=dbo.MFGROU.ROUNAM AND REFTYP='工艺'),reftype=('工艺')
END
各位大神帮帮忙!怎么写才能提高触发器的效率
...全文
335 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanyuchao111 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
试试这个
CREATE TRIGGER M ON dbo.MFGROU
    FOR INSERT
AS
    BEGIN
        UPDATE  dbo.MFGROU
        SET     id = ( SELECT   autoid
                       FROM     dbo.REFDEFINE
                       WHERE    REFNAM = dbo.MFGROU.ROUNAM
                                AND REFTYP = '工艺'
                     ) ,
                reftype = ( '工艺' )
        WHERE   autoid IN ( SELECT  autoid
                            FROM    inserted )  --只更新插入列,不全表更新
    END
谢谢大神,可以了!
二月十六 2017-08-31
  • 打赏
  • 举报
回复
试试这个
CREATE TRIGGER M ON dbo.MFGROU
FOR INSERT
AS
BEGIN
UPDATE dbo.MFGROU
SET id = ( SELECT autoid
FROM dbo.REFDEFINE
WHERE REFNAM = dbo.MFGROU.ROUNAM
AND REFTYP = '工艺'
) ,
reftype = ( '工艺' )
WHERE autoid IN ( SELECT autoid
FROM inserted ) --只更新插入列,不全表更新
END

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧