Estamos tentando excluir procedimentos armazenados com nomes como '%backup%' ou %WI%'.
Aqui está a consulta total que usei ..
;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' and ( object_name(object_id) NOT LIKE '%BACKUP%'
or object_name(object_id) not like '%backup%'
OR object_name(object_id) NOT LIKE '%Wi%')
)
SELECT * FROM CTE
Exemplo de saída da consulta acima:
report_spBIHRRecruitmentReport_Phase2_backup
Mas, estranhamente, a consulta acima está retornando resultados que ainda têm nomes
como
1.backup
2.Wi
Então eu tentei usar o agrupamento para restringir resultados como resultados.
;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' collate SQL_Latin1_General_CP1_CI_AS
and ( object_name(object_id) NOT LIKE '%BACKUP%'
or object_name(object_id) not like '%backup%'
OR object_name(object_id) NOT LIKE '%Wi%' collate SQL_Latin1_General_CP1_CI_AS
))
SELECT * FROM CTE
A saída ainda contém nomes como abaixo:
report_spBIHRRecruitmentReport_Phase2_backup
Abaixo estão as informações do meu banco de dados:
Versão:SQL Server 2012
Collation:SQL_Latin1_General_CP1_CI_AS
nível de compatibilidade: 90
PERGUNTE:
Você pode me ajudar a entender por que ainda recebo nomes como '%backup% ou '%wi%'
Scripts para reproduzir:
create proc usp_test1_backup
as
begin
end
create proc usp_test2_wi
as
begin
end
drop proc usp_test1_backup
drop proc usp_test2_wi
Plano de execução da minha consulta se te ajudar:
Por favor, deixe-me saber se você precisar de mais informações
A resposta é bem simples. Você está usando uma carga de
OR
s, que deve serAND
s:No seu caso,
object_name(object_id) not like '%backup%'
ainda corresponderáOR object_name(object_id) NOT LIKE '%Wi%'
e retornará a linha etc etc.Altere todas as condições acima para
AND
e você ficará bem.