Dal momento che non ci hai dato una descrizione completa della vostra situazione, non possiamo dare una risposta completa, tuttavia, in generale, è Loops che si vuole evitare in una lingua set-based come SQL e non Cursori(il problema con Cursosr è che essi richiedono i cicli).
Nei tuoi commenti che forniscono un po 'di più informazioni che si desidera "scorrere prima tabella, confrontare a seconda tabella, e quando il confronto non riesce a eliminare i record dalla prima tabella. In essenza sto eliminando recods . dalla prima tabella di dipendenti che non sono più con la società "
Ecco come si può fare questo in SQL:
DELETE From FirstTable
WHERE FirstTable.EmployeeID NOT IN
(
SELECT SecondTable.EmployeeID
FROM SecondTable
WHERE SecondTable.Flag = 'Y'
)
nessun cicli sono necessari ...
Se il problema è allora che si desidera utilizzare un pre-esistente stored procedure per fare la cancellazione, poi ci sono diverse possibilità:
In primo luogo, è possibile estrarre il contenuto della stored procedure e ri-scrittura loro per queste condizioni WHERE precedenti. Capisco che si tratta di duplicazione del codice e che viola gli istinti DRY di alcune persone, tuttavia, capisco che SQL è NON un ambiente di sviluppo orientato agli oggetti e che a volte la duplicazione del codice deve avvenire.
La seconda opzione consisterebbe nel rifattorizzare la stored procedure in modo che potesse accettare un parametro TablePar per i suoi IDimpiedi da eliminare.Tuttavia, questo è complicato e avremmo bisogno di vedere quella stored procedure per consigliarvi.
La terza opzione sarebbe quella di utilizzare l'aggregazione di stringa per costruire SQL dinamico per chiamare la stored procedure per ogni EmployeeID da eliminare in questo modo:
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);
Questo evita sia il Looping ei problemi Cusror, anche se molti non mi piace anche Preferisco questa soluzione io stesso, in gran parte a causa della sua generalità.
si fa a non usare aderire? –
No, eseguo il loop della prima tabella, confronto con la seconda tabella e quando il confronto fallisce, cancello i record dalla prima tabella. In sostanza sto cancellando le ricodifiche dalla prima tabella di dipendenti che non sono più con la compagnia. –
Quali dati stai passando alla stored procedure dalla riga? – podiluska