您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
-->
当前位置:首页 >> 编程问答 >> MSSQL >> [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器

[SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器

来源:网络整理     时间:2017/10/30 19:22:37     关键词:

关于网友提出的“ [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器”问题疑问,本网通过在网上对“ [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器
描述:

sql

在SQL Server插入数据时报了错,表有个插入后的触发器
错误:
 [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器
表结构:
 [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器
触发器:

IF OBJECT_ID(
't_afterinsert_on_st_pptn_r'
) IS NOT NULL DROP TRIGGER t_afterinsert_on_st_pptn_r
GO
CREATE TRIGGER t_afterinsert_on_st_pptn_r 
ON st_pptn_r 
AFTER INSERT 
AS
BEGIN
 UPDATE st_pptn_real 
 SET 
  st_pptn_real.STCD = inserted.STCD,
  st_pptn_real.TM = inserted.TM,
  st_pptn_real.DRP = inserted.DRP,
  st_pptn_real.DRP1H = (
   SELECT
 ISNULL(SUM(DRP), 0) FROM st_pptn_r
  WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -1, GETDATE()) AND GETDATE() 
    ),
  st_pptn_real.DRP3H = (
  SELECT ISNULL(SUM(DRP), 0) FROM st_pptn_r
  WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -3, GETDATE()) AND GETDATE() 
    ),
  st_pptn_real.DRP6H = (
  SELECT ISNULL(SUM(DRP), 0)FROM st_pptn_r 
    WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -6, GETDATE()) AND GETDATE() 
    ),
  st_pptn_real.DRP12H = (
  SELECT
ISNULL(SUM(DRP), 0)FROM st_pptn_r
  WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -12, GETDATE()) AND GETDATE() 
    ),
  st_pptn_real.DRP24H = (
  SELECT
ISNULL(SUM(DRP), 0) FROM st_pptn_r
  WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -24, GETDATE()) AND GETDATE() 
    ),
  st_pptn_real.DRP48H = (
  SELECT
ISNULL(SUM(DRP) , 0) FROM st_pptn_r
  WHERE st_pptn_r.TM BETWEEN DATEADD(hh, -48, GETDATE()) AND GETDATE() 
    )
 FROM inserted
 DECLARE 
  @STCD VARCHAR(200), 
  @TM_H VARCHAR(200),
  @TM_D VARCHAR(200),
  @TM_M VARCHAR(200)
 SELECT 
  @STCD=STCD, 
  @TM_H=CONVERT(VARCHAR(13), TM, 120),
  @TM_D=CONVERT(VARCHAR(10), TM, 120),
  @TM_M=CONVERT(VARCHAR(7), TM, 120)
 FROM inserted 
--  HOUR 
 IF ((SELECT COUNT(STCD) FROM st_pptn_r_hour WHERE STCD = @STCD AND TM = @TM_H +':00:00')=0)
 BEGIN
  INSERT INTO st_pptn_r_hour(STCD,[TM],[DRP])
              SELECT 
              @STCD,
              [TM]= @TM_H +':00:00',
              [DRP]=(
                    SELECT SUM(DRP)
                    FROM st_pptn_r
                    WHERE CONVERT(VARCHAR(13), TM, 120)=@TM_H
                    )
 END
 ELSE
 BEGIN
  UPDATE st_pptn_r_hour
  SET DRP=(
           SELECT SUM(DRP)
           FROM st_pptn_r
           WHERE CONVERT(VARCHAR(13), TM, 120)=@TM_H
           )
  WHERE CONVERT(VARCHAR(13), TM, 120)=@TM_H
 END
 -- DAY 
 IF ((SELECT COUNT(STCD) FROM st_pptn_r_day WHERE STCD = @STCD AND TM = @TM_D +' 00:00:00')=0)
  BEGIN
   INSERT INTO st_pptn_r_day(STCD,[TM],[DRP])
               SELECT 
               @STCD,
               [TM]= @TM_D +' 00:00:00',
               [DRP]=(
                     SELECT SUM(DRP)
                     FROM st_pptn_r
                     WHERE CONVERT(VARCHAR(10), TM, 120)=@TM_D
                     )
  END
  ELSE
  BEGIN
   UPDATE st_pptn_r_day
   SET DRP=(
            SELECT SUM(DRP)
            FROM st_pptn_r
            WHERE CONVERT(VARCHAR(10), TM, 120)=@TM_D
            )
   WHERE CONVERT(VARCHAR(10), TM, 120)=@TM_D
  END
 
 -- MONTH
 IF ((SELECT COUNT(STCD) FROM st_pptn_r_month WHERE STCD = @STCD AND TM = @TM_M +'-01 00:00:00')=0)
  BEGIN
   INSERT INTO st_pptn_r_month(STCD,[TM],[DRP])
               SELECT 
               @STCD,
以上介绍了“ [SQL Server]如果DML语句包含不带INTO子句的OUTPUT子句,则该目标表不能具有任何启用的触发器”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4486912.html

相关图片

相关文章