Próbuję napisać zapytanie, które aktualizuje pole HID tbl8_update_transactions (gdzie jest puste) z kluczową wartością klucza (HID), która jest najwyższa w HOLIDAY_DATE_TABLE . I pojawia się następujący błądZapytanie o aktualizację SQL - agregacja może nie pojawić się na liście zestawów instrukcji UPDATE
„An łączna nie może pojawić się w wykazie określonym w instrukcji UPDATE”
Czytałem, że muszę to osiągnąć za pomocą podzapytania, ale potrzebują pomocy. Dzięki
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;
Aktualizacja: Tried Proponowane rozwiązanie
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;
Niestety wpływa to na wiersze 0/nie działa. Myślę, że to dlatego, że HID jest kluczem obcym (w tbl8_update_transactions
). Prawdziwym problemem wydaje się być moja metodologia C# do wstawiania rekordów do tabeli (wstawia wiersz bez zapełniania klucza obcego). Chciałbym obsłużyć go z wyzwalaczy, a nie kod C#. Moje tabele są następujące.
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)
);
myślę, że może to rozwiązać zerowej kluczową kwestię zagraniczną, czy mogę uzyskać pomoc z nią
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
w przypadku chcesz zobaczyć mojego kodu C#, który wykonuje wkładkę z powodzeniem, ale nie wypełnić klucz obcy
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);
}
Twoja składnia sprzężenia nie jest całkiem poprawna i myślę, że będziesz musiał użyć CTE lub wstępnie obliczonej zmiennej, aby obliczyć dowolne agregaty osobno. Obecnie, jeśli te dwie tabele nie są skorelowane w żaden sposób, powinieneś używać zmiennej. Również '= NULL' nie ma sensu; Myślę, że miałeś na myśli 'IS NULL'. –
'DECLARE @ h INT; SELECT @h = MAX (HID) Z dbo.HOLIDAY_DATE_TABLE; UPDATE dbo.tbl8_update_transactions SET HID = @h GDZIE HID JEST NIŻE; ' –