Announcement

Collapse
No announcement yet.

Stored Procedure scheint zu verschwinden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stored Procedure scheint zu verschwinden

    Hallo,
    ich arbeite in einer MSSQL Datenbank, in der ich eine Stored procedure definiert habe. Ich habe das komische Phenomän, dass mir die Prozedur von Zeitzu Zeit einfach verschwindet. Ein Blick in den Enterprise Manager bestätigt mir das. Ich rufe aber garantiert von nirgends einen "Drop procedure" auf, und einen Asuführfehler hat mit die Prozedur auch noch nicht geliefert.

    Noch skulierer ists, weil mir das Problem in einer Testdatenbank NICHT auftritt, obwohl die eigentlich nur ein Restore der Originaldatenbank ist. Ich bin bischen sprachlose. Ich schliesse aber eigentlich einen Fehler meinerseits aus Delphi heraus aus.

    Aber vielleicht ist das Problem ja bekannt. Ich nutze MSSQL 2000

  • #2
    Hallo,
    eine gespeicherte Prozedure kann nicht so einfach verschwinden. Allerdings ist es entscheidend, welcher Datenbank-Benutzer die Stored Procedure angelegt hat und wie man die SP aufruft. Wenn zum Beispiel der dbo (der Datenbankeigentümer) eine Stored Procedure angelegt hat, kann er auf die Prozedur zugreifen. Im Query Analyzer des MS SQL Server würde das so aussehen:
    <code>
    EXEC dbo.NameDerStoredProcedure
    </code>
    &gt;..nur ein Restore der Originaldatenbank ist.
    <br>
    Wenn das RESTORE unter einem anderen Datenbankbenutzerkonto ausgeführt wurde, hängt es vom Zugriffsweg ab, ob der aktuelle Benutzer (Datenbank-Session) diese SP sehen darf. Alle Datenbank-Objekte (Tabelle, Views, Stored Procedure) werden im Sicherheits-Kontext ausgeführt, so dass das Rechtekonzept vom MS SQL Server an dieser Stelle ins Spiel kommt

    Comment


    • #3
      Vielen Dank für die schnelle Antwort,

      wir arbeiten ausschliesslich zur Zeit noch mit dem dbo unter dem sa Account. Die Prozedur kann auch problemlos in der Datenbank ausgeführt werden. Jedoch aus mir unerklärlichen Gründen kommt irgendwann die Fehlermeldung, dass die SP nicht gefunden werden kann. Ein Blick im Enterprise Manager bestätigt das dann auch. Die SP ist in der Tat weg. Hier mal zur Vollständigkeit halber diese SP, die im Grunde nichts kompliziertes macht, als ein Feld DateEnd auf den Vortag des Datebegin des nächsten Records zu setzen:

      create procedure sp_OccupantBeginMove (@App int) as
      declare @ID int
      declare @LastID int
      declare @DateBegin datetime
      declare @DateEnd datetime
      declare @NextBegin datetime

      declare CR CURSOR for
      select ID, DateBegin, DateEnd from occupant where apartment = @App order by DateBegin

      open CR
      fetch next from CR
      into @ID, @DateBegin, @DateEnd
      while @@fetch_status = 0
      begin
      select @NextBegin = '3000/01/01'
      select @LastID = @ID
      fetch next from CR
      into @ID, @DateBegin, @DateEnd
      if @@fetch_status = 0 begin
      select @NextBegin = @DateBegin
      end
      update Occupant set DateEnd = DateAdd(day,-1,@NextBegin) where ID = @LastID
      EN

      Comment


      • #4
        Hallo,
        <br>
        &gt; create procedure sp_OccupantBeginMove (@App int) as
        <br>
        eine eigene Stored Procedure sollte <b>niemals</b> mit dem Präfix <b>sp_</b> beginnen, da der MS SQL Server alle derart gekennzeichneten Prozeduren gesondert behandelt. Tritt das Problem auch auf, wenn die Prozedur als Namen die Zeichenkette <i>spOccupantBeginMove</i> verwendet?
        <br>
        P.S: Eine Stored Procedure, die mit dem Präfix <i>sp_</i> beginnt, sollte nur in der <i>master</i>-Datenbank angelegt werden, um dort global für alle anderen Datenbanken ohne explizite Adressierung über den Datenbanknamen verfügbar zu sein. Der MS SQL Server sucht jede SP, die mit dem Präfix <i>sp_</i> beginnt, zuerst in der <i>masters</i>-Datenbank

        Comment


        • #5
          Hallo Herr Kosch,

          sorry für die verspätete Rückmeldung meinerseits.

          Diese Präfixregelung war mir unbekannt, und seit ich die Stored Procedure umbenannt habe, hat es den Anschein zu klappen. Mag also wohl wirklich daran gelegen zu haben. Nur komisch daß ich darüber keine Info im Netz rsp. OH zum MSSQL Server finden konnte.

          Vielen Dank für die kompetente Antwort

          Comment

          Working...
          X