Delete, update where nélkük ne fusson le.

Delete, update where nélkük ne fusson le.
2012-01-13T20:39:00+01:00
2012-02-11T12:45:47+01:00
2022-11-24T16:05:36+01:00
h4cwrz
Sziasztok!

Meg lehet oldani azt a problémát, hogy ha delete,update, parancs ne fusson le where nélkül,
és ne a "begin tran, commit tran, rollback tran" alkalmazzuk.
SQL Server 2008 Management Studio ezt a programot használom ebben nincs valami funkció vagy kiegészítés? Ne szerver oldali megoldás legyen, hanem kliens.
Valakinek valami ötlet?
Köszi
Mutasd a teljes hozzászólást!
Szia!

Egy megoldás, ami talán jó Neked.
Minden update, delete előtt a kódot lefuttat egy függvényt, ami megvizsgálja a problémát. Ez annyit csinál, hogy megnézi, hogy van-e valahol a futtatandó sql-ben where(elől, hátul szóközzel, mert különben a "delete from somewhere"-re is 1-el térne vissza, viszont szintaktikailag a where előtt, után space kell). Ha van 1, ha nincs 0. Ez alapján a kódod tudni fogja, hogy mehet-e.

Megjegyzés! Az update nem ennyire triviális, mert ott lehet, hogy alselectel updatel valaki, amiben mondjuk használ where-t.

create function f_check_query (@query varchar(4000)) returns int as BEGIN declare @result int declare @where int set @where = (select CHARINDEX(' where ',lower(@query))) IF @where > 0 BEGIN set @result = 1 END ELSE set @result = 0 return @result END

Működés:
Minden delete, update előtt kell egy sor a kódodba, ami meghívja ezt:

select dbo.f_check_query(@statement)

Üdv
H.
Mutasd a teljes hozzászólást!

  • Ezt max úgy tudod, hogy készítesz egy eljárást, ami ellenőrzi, hogy van e az sql text-ben where. És ezen az eljáráson keresztül futtatsz minden update és delete parancsot.
    Mutasd a teljes hozzászólást!
  • Meg lehet oldani azt a problémát, hogy ha delete,update, parancs ne fusson le where nélkül,
    és ne a "begin tran, commit tran, rollback tran" alkalmazzuk.

    Bocsi, de szvsz ez csak rajtad múlik.
    Ne írj olyant amiben nincs where.
    Bár az egész kérdés felvetésed elég homályos, picit többet írhatnál arról, hogy:
    miért is jött/keletkezett ezen igényed?
    Mutasd a teljes hozzászólást!
  • Bár írtad hogy kliens oldali legyen az ellenőrzés, én mégis a szerver oldalra tenném. Ezt megteheted az instead of delete és update triggerekben. Ha a tranzakciókor annyi rekord van a deleted táblában, mint az adott táblában, akkor nem volt feltétel.
    Mutasd a teljes hozzászólást!
  • annyi rekord van a deleted táblában, mint az adott táblában, akkor nem volt feltétel.


    Vagy minden rekord megfelelt a feltételnek.
    Mutasd a teljes hozzászólást!
  • na ja
    Mutasd a teljes hozzászólást!
  • Szia!

    Egy megoldás, ami talán jó Neked.
    Minden update, delete előtt a kódot lefuttat egy függvényt, ami megvizsgálja a problémát. Ez annyit csinál, hogy megnézi, hogy van-e valahol a futtatandó sql-ben where(elől, hátul szóközzel, mert különben a "delete from somewhere"-re is 1-el térne vissza, viszont szintaktikailag a where előtt, után space kell). Ha van 1, ha nincs 0. Ez alapján a kódod tudni fogja, hogy mehet-e.

    Megjegyzés! Az update nem ennyire triviális, mert ott lehet, hogy alselectel updatel valaki, amiben mondjuk használ where-t.

    create function f_check_query (@query varchar(4000)) returns int as BEGIN declare @result int declare @where int set @where = (select CHARINDEX(' where ',lower(@query))) IF @where > 0 BEGIN set @result = 1 END ELSE set @result = 0 return @result END

    Működés:
    Minden delete, update előtt kell egy sor a kódodba, ami meghívja ezt:

    select dbo.f_check_query(@statement)

    Üdv
    H.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd