【问题标题】:TRIGGER AFTER INSERT SELECT MIN(COUNT) insert IDINSERT SELECT MIN(COUNT) 插入 ID 后触发
【发布时间】:2015-12-15 14:01:00
【问题描述】:

我正在尝试在 eventss 表上插入后创建触发器。触发器应从bookingCoordinator 表中选择Bcoordinator_ID,它们在eventss 表中的出现次数最少。

这是我的表数据,后面是触发器。它不喜欢值中的minCount,我认为它正在寻找和int。

DROP TABLE eventsBooking
CREATE TABLE eventsBooking 
(
      EBK INT NOT NULL IDENTITY(100, 1),
      booking_ID AS 'EBK'+CAST( ebk as varchar(10)) PERSISTED PRIMARY KEY,

      bookingDate DATE,
      Bcoordinator_ID VARCHAR (20),
      eventss_ID VARCHAR (20) NOT NULL
)

INSERT INTO eventsBooking    
VALUES ('2015-01-07 11:23:00', NULL, 'EVT100');

Eventss表:

EVT INT NOT NULL IDENTITY(100, 1),
eventss_ID AS 'EVT' + CAST(evt as varchar(10)) PERSISTED PRIMARY KEY,

eventsName varchar(50), 
noOfStages SMALLINT, 
noOfRounds SMALLINT, 
eventsDate DATE,
entryFee DECIMAL (7,2),
venue_ID VARCHAR (20) NOT NULL,
judges_ID VARCHAR (20)

INSERT INTO eventss  
VALUES ('Swimming Gala 2015', '3', '7', '2015-01-07 09:00:00', '35.00', 'VEN101', 'JUD100');



CREATE TABLE bookingCoordinator 
(
      BCO INT NOT NULL IDENTITY(100, 1),
      Bcoordinator_ID AS 'BCO'+CAST( bco as varchar(10)) PERSISTED PRIMARY KEY,

      forename varchar(20) NOT NULL, 
      familyName varchar(50)
)

INSERT INTO bookingCoordinator VALUES ('Steve', 'Wills');

触发器:

CREATE TRIGGER TRGinsertJudge 
ON  [dbo].[eventss]
AFTER INSERT 
AS 
BEGIN
   SET NOCOUNT ON;

   INSERT INTO dbo.eventsBooking (Bcoordinator_ID, bookingDate, Eventss_ID)             
   VALUES(minCount, getdate(), 100)

   SELECT MIN(COUNT(Bcoordinator_ID)) AS minCount
   FROM eventsBooking
END

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您不能对聚合进行聚合,即MIN(COUNT(1))

    如果您只想要 eventsBooking 中计数最少的 Bcoordinatior_ID,请执行此操作

    select top 1 bcoordinator_id 
    from eventsBooking 
    group by bcoordinator_id 
    order by count(1) asc
    

    而且您不会在 INSERT INTO ... SELECT 语句中使用 VALUES()

    另外,在您当前的代码中,由于 eventsBooking.bcoordinator_id 始终为空,您需要加入实际的 bookingCoordinators 表以返回未预订任何活动的预订协调员。

    所以你完整的触发语句应该是

        INSERT INTO dbo.eventsBooking (Bcoordinator_ID, bookingDate, Eventss_ID)                
         select 
     top 1
      bookingcoordinator.bcoordinator_id, getdate(), 100 
        from bookingCoordinator left join eventsBooking 
            on bookingCoordinator.Bcoordinator_ID = eventsBooking.Bcoordinator_ID
        group by bookingcoordinator.bcoordinator_id 
        order by count(1) asc
    

    【讨论】:

    • 在我有 minCount.我试过输入 1 但它只将数字 1 插入 Bcoordinator_ID
    • 哦,我刚刚意识到我忘记了什么,一旦找到计数最少的 Bcoordinator,它应该在 bookingCoordinator.Bcoordinator_ID 中插入 Bcoordinator_ID
    • 它说'end'附近的语法不正确,这可能是什么
    • 最后有两个END吗?你应该只有一个,我只是复制了你的,所以你知道要替换什么。
    猜你喜欢
    • 1970-01-01
    • 2014-05-01
    • 2011-03-16
    • 1970-01-01
    • 2023-03-07
    • 2015-02-22
    • 2016-05-04
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多