Cautare coloana in toate tabelele

Configurare noua (How To)

Situatie

Avem nevoie uneori sa cautam o coloana intr-o baza de date. Fie pt ca nu mai stim in ce tabela era acea coloana pe care ne-o amintim, fie ca vrem sa vedem daca acea coloana mai este folosita si in alte tabele fata de cea in care stim ca se afla.

Pentru aceasta am facut o procedura care are doi parametri @ColumnName si  @CaseSensitive.

Procedura returneaza , din baza curenta, toate tabelele care contin coloana data in primul parametru.
Dupa cum spuneam procedura are doi parametri:
1. @ColumnName = numele coloanei ce este cautat in toate tabelele din baza pe care se ruleaza procedura
2. @CaseSensitive = daca este 1 numele coloanei trebuie sa fie exact asa cum este scris, pe cand, daca este 0, atunci nu se tine cont de caractere mici sau mari

Precizare: al doilea parametru se poate folosi doar daca baza pe care se ruleaza procedura este setata ca fiind CS (Case sensitive). In cazul in care baza pe care se ruleaza procedura este setata CI (case insensitive) , indiferent daca la parametrul  @CaseSensitive se alege 0 sau 1 procedura nu va tine cont de felul in care e scris primul parametru.

 

Solutie

/*
Procedura returneaza , din baza curenta, toate tabelele care contin coloana data in primul parametru.
Procedura are doi parametri:
1. @ColumnName = numele coloanei ce este cautat in toate tabelele din baza pe care se ruleaza procedura
2. @CaseSensitive = daca este 1 numele coloanei trebuie sa fie exact asa cum este scris, pe cand, daca este 0, atunci nu se tine cont de caractere mici sau mari

*/

CREATE PROC [dbo].[BD_SearchAllTablesForColumn_prc]
(
@ColumnName nvarchar(100),
@CaseSensitive bit = 0
)
AS

if @CaseSensitive = 1
BEGIN
select distinct b.name
from sys.syscolumns a
join sys.tables b on a.id = b.object_id and a.name = @ColumnName
END

if @CaseSensitive = 0
BEGIN
select distinct b.name
from sys.syscolumns a
join sys.tables b on a.id = b.object_id and UPPER(a.name) = UPPER(@ColumnName)
END

 

Tip solutie

Permanent
Etichetare:

Voteaza

(26 din 51 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?