Ponieważ nie dałeś nam pełny opis swojej sytuacji, nie możemy dać pełnej odpowiedzi, jednak w ogóle, to Loops że chcesz uniknąć w języku ustawionym na bazie podobnego SQL i nie kursory per se (problem z Cursosr polega na tym, że wymagają pętli).
W komentarzach podajesz nieco więcej informacji, ponieważ chcesz "przechodzić przez pierwszą tabelę, porównać z drugą tabelą, a gdy porównanie się nie powiedzie, usuniemy rekordy z pierwszej tabeli. . z pierwszej tabeli pracowników, którzy nie są już w firmie "
Oto jak można to zrobić w SQL:
DELETE From FirstTable
WHERE FirstTable.EmployeeID NOT IN
(
SELECT SecondTable.EmployeeID
FROM SecondTable
WHERE SecondTable.Flag = 'Y'
)
Pętle nie są potrzebne ...
Jeśli problem jest więc, że chcesz korzystać z istniejącej wcześniej procedury przechowywanej zrobić usunięcia, a następnie istnieje kilka możliwości:
Po pierwsze, można wyodrębnić zawartość procedura składowana i re-write dla tych poprzedzających warunków WHERE. Rozumiem, że jest to powielanie kodu i że narusza instynkty DRY niektórych osób, jednak rozumiem, że SQL jest środowiskiem programistycznym zorientowanym obiektowo i że czasami musi nastąpić powielanie kodu.
Drugą opcją byłoby zmodyfikowanie procedury przechowywanej, aby mogła zaakceptować parametr TableParameter dla jego EmployeeId do usunięcia.Jest to jednak skomplikowane i musielibyśmy zapoznać się z procedurą przechowywaną, aby poinformować o tym.
Trzecią opcją byłoby użyć agregacji ciąg zbudować dynamiczny SQL, aby zadzwonić do procedury przechowywanej dla każdego IDpracownika zostać usunięty tak:
DECLARE @sql As NVarchar(MAX);
SET @sql = N'';
SELECT @sql = @sql + '
EXEC YourProc ''' + CAST(EmployeeID As NVARCHAR(MAX)) + '''; '
FROM FirstTable
WHERE FirstTable.EmployeeID IN
(
SELECT SecondTable.EmployeeID
FROM SecondTable
WHERE SecondTable.Flag = 'Y'
)
EXEC(@sql);
ten sposób unika się zarówno pętli i problemy Cusror, choć wielu nie lubię tego również. Sam preferuję to rozwiązanie, głównie ze względu na jego ogólność.
Nie możesz używać przyłączyć? –
Nie, przechodzę przez pierwszą tabelę, porównuję do drugiej tabeli, a gdy porównanie się nie powiedzie, usuwam rekordy z pierwszej tabeli. W essense usuwam recods z pierwszej tabeli pracowników, którzy nie są już z firmą. –
Jakie dane przechodzisz do procedury przechowywanej z wiersza? – podiluska