Når vi forstår kravene til SQL Server Stored-procedurer, er vi ofte nødt til at søge efter specifik tekst i dem alle. Det være sig til fejlretning, identifikation af afhængigheder eller blot inspicering af brugen af en bestemt tabel, kolonne eller ethvert andet SQL-element. Denne opgave kan dog være ret kedelig, hvis den udføres manuelt. I denne artikel vil vi diskutere, hvordan man gør det på en mere effektiv måde, ved at scripte os ud.
Opgaveforenkling med SQL-scripts
Ved at udnytte kraften i SQL-scripts kan vi gøre denne besværlige opgave til en hurtig og enkel proces. I stedet for individuelt at undersøge hver lagret procedure, kan vi direkte forespørge databasens systemvisninger for at søge efter en bestemt streng i dem. Denne løsning er utrolig alsidig, da den er kompatibel med de fleste SQL Server-versioner.
Denne procedures princip er meget ligetil – det handler om at hente data fra sql_modules-visningen med en simpel select-sætning. Systemvisningen sys.sql_modules indeholder en række for hvert objekt, der har et tilknyttet SQL-modul. SQL-moduler er dybest set alle rutiner eller objekter, der er skabt ud fra en SQL Server Data Manipulation Language (DML)-sætning - (f.eks. lagrede procedurer, visninger, funktioner).
SQL-scriptet til at udføre denne handling ville være:
SELECT OBJECT_NAME(sm.object_id) AS object_name,
OBJECT_DEFINITION(sm.object_id) AS definition
FROM sys.sql_modules AS sm
WHERE sm.definition LIKE '%your_text%'
Dykker ned i SQL-kode
I den givne SQL-kode skal du erstatte 'din_tekst' med den streng, du leder efter. Forespørgslen returnerer en liste over objektnavne (lagret procedure, funktion, visning osv.) og deres tilsvarende definitioner, der inkluderer den angivne søgetekst. På denne måde kan du nemt identificere alle forekomster af den specifikke tekst, du søger efter.
Forståelse af koden:
- OBJECT_NAME(sm.object_id) er navnet på det objekt, der indeholder den angivne tekst.
- OBJECT_DEFINITION(sm.objekt_id) er definitionen af objektet, dvs. objektets SQL-script.
Sørg venligst for, at hvis den tekst, du leder efter, er en del af et SQL-nøgleord, vil denne forespørgsel også returnere de objekter, hvor dette nøgleord bliver brugt. Derfor er det tilrådeligt at søge efter karakteristiske søgeord.
Yderligere overvejelser
Selvom denne løsning fremskynder processen betydeligt, er der nogle overvejelser at huske på. Definitionskolonnen i sys.sql_modules har en maksimal størrelse på 4000 tegn. Hvis du har en lagret procedure længere end det, vil teksten blive afkortet. Dette kan potentielt medføre, at nogle forekomster af søgeteksten går tabt. Løsningen styres dog ved at indstille 'TEXTSIZE'-indstillingen til dens maksimale værdi på 2147483647.
Dette er måske ikke den mest konventionelle brug af SQL-scripting, men det beviser helt sikkert den alsidighed og forenkling, det medfører for databaseprofessionelles daglige opgaver. Det er et glimrende eksempel på, hvordan forståelse og effektiv brug af de tilgængelige værktøjer kan forbedres markant SEO og produktivitet.
