Miért NE kezdjünk tárolt eljárást sp_-sal?

Sok fejlesztő használ naming conventiont (nevezési szokást) az adatbázis objektumainak elnevezésénél. Ez kedves tőlük, mivel kiszámíthatóbbá teszik a karbantartók (beleértve saját magukat) életét. Ámde vannak kevésbé szerencsés naming conventionök, és itt nem csak az akkor jó ötletnek tűnő Systems Hungarian notationre gondolok.

Többször találkoztam az sp_ prefixszel, mint tárolt eljárás jelöléssel, ami jó ötletnek tűnik, a Microsoft is ezt favorizálja, úgyhogy biztos jó. De nem az. Az sp_ ugyanis a Microsoft sajátja, amit befoglaltak kódból: minden sp_ kezdetű tárolt eljárást a master adatbázisban keres először az SQL Server, és ha ott nem találja, akkor nézi meg az aktuális adatbázist. Benne is van a BOL-ban, hogy ne használd, mert ráfázol. És íme, a példa:

use tempdb
go
create procedure sp_password 
AS
print 'De rossz nev ez...'
GO

És próbáljuk meg futtatni a mi kis sp_password SP-nket. Ez sosem fog sikerülni, még ha két- vagy háromtagú nevet adunk meg, akkor se.

EXEC sp_password
-- fail
EXEC tempdb.dbo.sp_password
-- ez is fail
GO

Az egyetlen elfogadható kiút, ha nem a dbo schema alá rakjuk, és legalább kéttagú névvel hivatkozunk rá:

create schema test
GO
create procedure test.sp_password 
AS
print 'De rossz nev ez...'
GO
EXEC test.sp_password

Azért valljuk be, ez így gáz. Használjunk valami jobb nevezéket…

Ha esetleg valakiben felmerülne a kérdés, hogy ez miért jó dolog, akkor gondolja végig a fenti példa esetleges működésének következményeit: Gonosz Géza olyan szép trójai sp_password-öt produkálhat, hogy mindenki csak nézni fog. A security fontos dolog…

4 Comments

  1. Janka János:

    Elég egy pillantást venni az MS Northwind DB példákra.
    Én azokat a konvenciókat használom ilyen esetekben.
    Ők az usp_ prefixet használják konvencionálisan, utalva arra, hogy felhasználó definiált sp-ről van szó.

  2. Erik:

    Igen, az is egy bölcs irányvonal. Bevallom, én spElolvasomEztATablat nevekkel operálok – Apps Hungarian notation párti vagyok :)

  3. Roberto:

    Én meg már vagy 4 éve nem használok tárolt eljárást, meg natív SQL-t. :D:D

  4. SzLZs:

    Remélem a pr_ nem porblémás.
    Sokáig éjjen a T-SQL!

Leave a comment