Ohne eine spezifische Teacher_ID
mit Parameter:
Korrelierte Unterabfrageversion:
create proc spUpdateTeachingHoursAndWages as
begin;
set nocount, xact_abort on;
update p
set HoursPerWeek = (
select count(*)
from Assignment.dbo.PupilDetails pd
where pd.Teacher_id = p.id
)
from Assignment.dbo.Payments p;
end;
go
inner join
Version:
create proc spUpdateTeachingHoursAndWages as
begin;
set nocount, xact_abort on;
update p
set HoursPerWeek = pd.HoursPerWeek
from Assignment.dbo.Payments p
inner join (
select
pd.id
, HoursPerWeek = count(*)
from Assignment.dbo.PupilDetails pd
group by pd.id
) pd
on p.id = pd.Teacher_id;
end;
go
cross apply()
Version:
create proc spUpdateTeachingHoursAndWages as
begin;
set nocount, xact_abort on;
update p
set HoursPerWeek = pd.HoursPerWeek
from Assignment.dbo.Payments p
cross apply(
select HoursPerWeek = count(*)
from Assignment.dbo.PupilDetails pd
where p.id = pd.Teacher_id;
) pd
end;
go
Hinweis: Why you should always include set xact_abort, nocount on;
- Erland Sommarskog
Vielen Dank, aber ich bin immer ein 'ungültiges Objekt name' Fehler für HoursPerWeek. Will versuchen zu sehen, was den Konflikt verursacht. –
Es tut mir leid, ich dachte Payments war Schemaname, aber es ist der Tabellenname, entfernen .HoursPerWeek – McNets
Danke für die Antwort, ich habe es tatsächlich herausgefunden :) Danke für die Hilfe !! –