Eu tenho um procedimento armazenado que está recebendo id como entrada. Se o id recebido for 0, precisamos excluir todas as linhas, caso contrário, precisamos excluir apenas as linhas que correspondem ao id de entrada.
Posso fazer isso dividindo minha consulta usando um if-else, mas esse é o problema aqui, queremos fazer isso em uma única consulta usando JOINS
e CASE
(pode ser).
Aqui está a minha mesa.
CREATE TABLE InfineonFiles (
infimax INTEGER NOT NULL,
neonId INTEGER NOT NULL,
eTime INTEGER NOT NULL,
pTime INTEGER NOT NULL,
cisId INTEGER NOT NULL )
O atributo de entrada é, digamos,
DECLARE @inpId INT = [ 0 OR POSITIVE INTEGER]
Deletar é assim
IF @inpId = 0
DELETE TOP (5000) AIA FROM InfineonFiles WHERE pTime < @timeUnitInSeconds
ELSE
DELETE TOP (5000) AIA FROM InfineonFiles WHERE pTime < @timeUnitInSeconds AND cisId = inpId
O acima precisa estar em uma única consulta. Como eu posso fazer isso?
O abaixo deve funcionar em uma única consulta, assumindo que cisId é apenas positivo.
... mas, para ser sincero, não entendo muito bem o que poderia ser um motivo para não dividir isso e deixaria sua consulta como está originalmente.
Foi assim que fiz usando o
CASE
statement. Alguém pode me ajudar com a diferença de desempenho entre esta e aOR
abordagem.