2009-05-13 17 views
17

Also, nicht sicher, was passiert. Aber ich habe Prozedur gespeichert und es verschwindet immer wieder aus meiner DB in SQL 2k.Verschwendete gespeicherte Prozedur

Ich kann es wieder hinzufügen und dann versuchen, es aus meiner Web-App ausführen, und ich bekomme eine Ausnahme sagen, dass die gespeicherte Prozedur nicht gefunden werden kann. Also dann krank zurück zum Management und erfrischen und es ist wieder weg!?!

hier ist die Konfiguration für die gespeicherte Prozedur:

set ANSI_NULLS OFF 
set QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[USP_Equipment_Delete] 
    @EquipmentID int 
AS 

DELETE FROM [dbo].[Equipment] 
WHERE 
    [EquipmentID] = @EquipmentID 

Keiner meiner anderen gespeicherten Prozedur verschwinden. Dies ist der einzige. Ich habe leicht 100 drin. Sie alle verwenden dieselbe SQLHelper-Klasse. Dieser verschwindet einfach immer !!! ?? !!

Jede Hilfe oder Vorschläge sind willkommen!

Vielen Dank!

+3

Haben Sie Ihre SQL Server-Protokolle überprüft oder versucht, den SQL Server-Profiler auszuführen? –

Antwort

34

Sie haben dieses oder ein anderes gespeichertes Proc erstellt und am Ende Ihres Codes, vielleicht nach einem Kommentar, wo Sie es nicht gesehen haben, haben Sie einen Tropfen dieses Proc. mit

einen Blick auf Ihre db Nehmen:

select syo.name 
from syscomments syc 
    join sysobjects syo on 
     syo.id = syc.id 
where syc.[text] like '%DROP PROC%' 
+1

Ich habe die Auswahl behoben. Führe es aus und sieh zu. Was passiert, ist, dass Sie proc 'b' erstellen, aber in Ihrem Abfragefenster unten haben Sie einen Tropfen dieses proc. Dieser Abfall tritt jedes Mal auf, wenn proc 'b' ausgeführt wird. – Peter

+0

+1 Die Abfrage sucht grundsätzlich nach einer gespeicherten Prozedur, die eine DROP-Anweisung enthält. Tolle Idee, lauf es! – Andomar

+0

DUD danke! das hat funktioniert!!!! Es hatte ein Drop-Verfahren darin. Du hast mir so sehr geholfen. Ich werde das aktualisieren und wir werden sehen, was jetzt passiert. VIELEN DANK! – Gabe

2

Haben Sie irgendwo ein CREATE PROCEDURE? Sie können eine Prozedur nicht ändern, wenn sie nicht existiert.

+0

Ja, habe ich es mit dem folgenden ... CREATE PROCEDURE [dbo] .USP_Equipment_Delete \t @EquipmentID int AS DELETE FROM [dbo]. [Anlagen] WHERE \t [EquipmentID] = @EquipmentID GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO – Gabe

+0

Anothe Ich dachte ... Haben Sie etwas in Ihren Datenbankskripten, das eine Prozedur löscht, bevor Sie sie erstellen? Und wenn dies der Fall ist, wird dieser Teil des Codes auf einer Ihrer anderen gespeicherten Prozeduren stattdessen diese Prozedur löschen? –

2

Möglicherweise verwendet der Code für den Zugriff auf die gespeicherte Prozedur einen anderen Kontext als dbo. Stellen Sie sicher, dbo.USP_Equipment_Delete dem Code hinzuzufügen, der es verwendet.

3

Sind Sie using die richtige Datenbank?

Versuche

using [database name]

vor Ihrer gespeicherten Prozedur ausgeführt wird, nur um sicher zu machen.

0

Überprüfen Sie, ob der "Initial Catalog" in Ihrer Verbindungszeichenfolge auf die richtige Datenbank eingestellt ist.

Versetzen Sie die Datenbank in den Einzelbenutzermodus (und stellen Sie sicher, dass Sie der einzelne Benutzer sind), und prüfen Sie, ob das Verfahren weiterhin stündlich verschwindet.

+0

Die ursprüngliche Zeichenfolge ist korrekt. Die Datenbank ist die richtige. Wenn ich in den Enterprise Manager gehe und die gespeicherten Prozeduren durchsuche, fehlt es. Ich füge es dann erneut hinzu. In nicht weniger als einer Stunde erfrische ich mich und es ist wieder weg. – Gabe

+1

Haben Sie kürzlich eine abfällige Bemerkung über die Ehefrau des Systemadministrators gemacht? :) – Andomar

+0

hahaahahahahahaha classic – Gabe

0

Vielleicht gibt es einen Job, der regelmäßig ein altes Backup wiederherstellt?

+0

krank überprüfen Sie das, ich glaube nicht, dass passiert, weil es auch meine anderen Ergänzungen töten würde. Lassen Sie mich überprüfen, dass tho – Gabe

+0

Es gibt keine Jobs zur Wiederherstellung ... – Gabe

-1

Wenn es da ist, dann ist diese Abfrage muss einen Datensatz zurück:

SELECT * FROM sysobjects 
WHERE id = OBJECT_ID('USP_Equipment_Delete') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
+1

-1 diese Suche für Objekte mit dem Namen 'USP_Equipment_delete'; was soll das für ein gutes tun? – Andomar

+0

sucht nach IDs, nicht nach Namen: ein Objekt mit einer ID entspricht der ID der gespeicherten Prozedur USP_Equiment_Delete – eKek0

+0

lesen Sie ID = OBJECT_ID ('USP_Equipment_Delete')? – eKek0

12

hatte ich das gleiche Problem und ich es einfach behoben:

In der Skriptdatei fehlte die Anweisung "GO" zwischen dem Ende der gespeicherten Prozedur und dem Beginn der nächsten Anweisung "IF EXIST THEN DROP".

Also was passiert ist, war, dass die Drop-Anweisung an das Ende der gespeicherten Prozedur im Script angehängt wurde. Wenn die Software die gespeicherte Prozedur ausführt, wird die gespeicherte Prozedur im Skript gelöscht.

Es scheint uns jetzt so offensichtlich, machte aber zu der Zeit keinen Sinn.Wir haben festgestellt, dass der SQL-Profiler für eine Kunden-Datenbank ausgeführt wurde, in der das Problem aufgetreten ist.

+0

Gleiches mit mir ................. – rball

+0

Hurensohn. Ja, ich habe den Proc mit dem fehlenden GO gefunden. Prost :) – Jamsi

0

Ich hatte das Problem, dass alle Stored Procedures mit einer create-Anweisung nach der Ausführung aus der Datenbank verschwanden.

Die Lösung war: Der Datenbankbenutzer sollte die Rechte zum Löschen, Erstellen und Ändern der Datenbank haben, in der die "Stored Procedures" erstellt werden.