我正在尝试编写一个查询,该查询使用HOLIDAY_DATE_TABLE中最高的主键值(HID)更新tbl8_update_transactions HID字段(其中为null)。我收到以下错误
“聚合可能不会出现在UPDATE语句的设置列表中”
我读到我需要使用子查询来完成此操作,但需要帮助。谢谢
USE BillingUI; UPDATE tbl8_update_transactions SET tbl8_update_transactions.HID = MAX(HOLIDAY_DATE_TABLE.HID) FROM HOLIDAY_DATE_TABLE WHERE tbl8_update_transactions.HID = NULL;
更新: 尝试了建议的解决方案
UPDATE tbl8_update_transactions SET HID = h.maxHID FROM (select max(HOLIDAY_DATE_TABLE.HID) as maxHID from HOLIDAY_DATE_TABLE) h WHERE tbl8_update_transactions.HID IS NULL;
不幸的是,这会影响0行/不起作用。我认为这是因为HID是外键(在中tbl8_update_transactions)。真正的问题似乎是我的C#方法,用于将记录插入表中(它在不填充外键的情况下插入行)。我想使用触发器而不是C#代码来处理它。我的表格如下。
tbl8_update_transactions
USE BillingUI; CREATE TABLE HOLIDAY_DATE_TABLE ( HID INT IDENTITY PRIMARY KEY, TABLE_NUMBER nchar(2) NOT NULL, HOLIDAY_DATE nchar(8) NOT NULL, FIELD_DESCRIPTION nVARchar(43) NULL, ); USE BillingUI; CREATE TABLE tbl8_update_transactions ( TID INT IDENTITY PRIMARY KEY, TABLE_NUMBER nchar(2) NOT NULL, HOLIDAY_DATE nchar(8) NOT NULL, FIELD_DESCRIPTION nVARchar(43) NULL, HID int, FOREIGN KEY (HID) REFERENCES HOLIDAY_DATE_TABLE (HID) );
我认为这可以解决空外键问题,如果我可以得到帮助的话
CREATE TRIGGER tbl8_ins ON HOLIDAY_DATE_TABLE FOR INSERT AS BEGIN INSERT INTO tbl8_update_transactions SELECT * FROM HOLIDAY_DATE_TABLE WHERE HID = MAX(HID); END
如果您想看到我的C#代码成功执行插入,但没有填充外键
public ActionResult Create() { return View(); } // // POST: /Table8/Create [HttpPost] public ActionResult Create(HOLIDAY_DATE_TABLE holiday_date_table, tbl8_update_transactions tbl8_update_transaction) { if (ModelState.IsValid) { db.HOLIDAY_DATE_TABLE.Add(holiday_date_table); db.SaveChanges(); db.tbl8_update_transactions.Add(tbl8_update_transaction); db.SaveChanges(); return RedirectToAction("../Billing/HolidayDateTable"); } return View(holiday_date_table); }
您可以这样编写查询:
我发现使用from子句而不在那里提到主表会令人困惑。我更喜欢这样写:
from
UPDATE ut SET HID = h.maxHID FROM tbl8_update_transactions ut CROSS JOIN (select max(HID) as maxHID from HOLIDAY_DATE_TABLE) h WHERE ut.HID IS NULL;