Ich habe eine Tabelle testtable
in der Datenbank erstellt testbase
, die die folgende Struktur aufweist:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
mit dem ich das Microsoft SQL Server 2008 Management Studio verwendet habe.
Ich habe eine gespeicherte Prozedur testtable_pricesmaller
wie folgt erstellt
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
und können die gespeicherten Prozeduren Object Explorer
im Microsoft SQL Server Management Studio anzeigen . (Es ist in der folgenden Baumstruktur der aufgeführt Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Ich finde es sehr seltsam, wenn ich die folgende Fehlermeldung erhalte:
Could not find the stored procedure 'dbo.testtable_pricesmaller'.
wenn ich die folgende SQL-Anweisung ausführe:
execute dbo.testtable_pricesmaller 50
Was könnte es fehlen?
USE
Anweisung hinzugefügt , aber es gibt mir den Fehler.Antworten:
IntelliSense Refresh local Cache sollte das Problem beheben
quelle
Sie sollten die Datenbank nicht neu starten müssen, nachdem Sie eine neue gespeicherte Prozedur hinzugefügt haben, obwohl Sie Ihren Objekt-Explorer aktualisieren müssen, um sie dort anzuzeigen.
Wenn Sie das nächste Mal eine gespeicherte Prozedur hinzufügen, versuchen Sie, im Objekt-Explorer die Option Ausführen mit der rechten Maustaste auszuführen, geben Sie Ihre Parameter ein und prüfen Sie, ob sie ausgeführt wird. Wenn es nicht läuft, bin ich mir nicht sicher, was dein Problem ist. Wenn es ausgeführt wird, ist es möglicherweise so einfach, dass SQL versucht, eine Abfrage aus der falschen Datenbank durchzuführen.
quelle
Endlich weiß ich, warum die Meldung im MS SQL Server Management Studio erscheint.
MS SQL Server Management Studio erfordert einen Neustart, nachdem eine gespeicherte Prozedur erstellt wurde.
Nach dem Neustart von MS SQL Server Management Studio liegt kein solcher Fehler mehr vor.
(Merkwürdig, bedeutet das, dass ich eine gespeicherte Prozedur jedes Mal neu starten muss, wenn ich sie erstelle?)
quelle
Ihr Befehl create sollte lauten
Sie fehlen
dbo.
vor dem Prozedurnamen. Wenn Sie eine Prozedur erstellen, empfiehlt es sich, den Benutzer / das Schema explizit mit dem Namen einer Prozedur zu definieren, dh der Prozedurname sollte vollqualifizierte Signaturen haben.Ich hoffe, dies wird dir helfen.
quelle
Wenn Sie in SQL Server 2008 unter einem Windows-Konto angemeldet sind und keine SYSADMIN-Sicherheitsstufe haben, kann / wird beim Erstellen eines Objekts ohne explizite Angabe des Schemas dieses unter [DOMÄNE \ Benutzername] erstellt ] anstelle von [dbo]. [ObjectName] (es wurde in SQL Server 2012 behoben, denke ich).
Ich hatte dieses Problem, als ich die Sicherheitsstufe eines Benutzers herabgesetzt habe und eine der von ihm ausgeführten Prozeduren das Löschen und Neuerstellen von Tabellen ohne Schema war, sodass der Rest der Prozedur abstürzte, weil er nicht mehr auf das Objekt zugreifen konnte . Es stellte sich heraus, dass die Tabellen nun unter seinem Domain-Benutzernamen erstellt wurden.
Hier ist der Microsoft-Beitrag zu diesem Verhalten:
https://docs.microsoft.com/de-de/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (siehe Abschnitt "Implizites Schema und Benutzererstellung")
Tabelle wird im Dbo-Schema nicht erstellt
SQL 2008 R2 erstellt Benutzer / Schema, wenn Windows-Benutzer Tabellen erstellt
Kurz gesagt, Sie haben wahrscheinlich entweder ein Datenbankproblem (Sie erstellen Ihre Tabelle in einer Datenbank, versuchen aber, von einer anderen aus darauf zuzugreifen) oder Sie haben das eben beschriebene Problem.
quelle
Ich weiß, dass das alt ist; Ich bin auf diese Frage gestoßen, als ich nach einer Lösung für dasselbe Problem gesucht habe, und ich poste diese Antwort in der Hoffnung, dass sie anderen hilft, die diese Frage ebenfalls finden.
In meinem Fall wurde die Fehlermeldung beim Ausführen eines SSRS-Berichts unter Verwendung einer freigegebenen Datenquelle angezeigt. Diese freigegebene Datenquelle hat keine Standarddatenbank angegeben (der Parameter Default Catalog =), und ich konnte sie nicht zur Verbindungszeichenfolge hinzufügen, weil ich kein Kennwort habe (und wenn Sie etwas in einer SSRS-Datenquelle ändern, besteht die Tendenz dazu damit Sie das Passwort erneut eingeben müssen).
Um dies zu lösen, habe ich die Standarddatenbank für die Anmeldung in der SQL Server-Instanz von master in die Datenbank geändert, die die gespeicherte Prozedur enthält, die der Bericht ausführen wollte.
Denken Sie beim Ausführen von Dingen über SSMS daran, dass der Bereich Objekt-Explorer eine Verbindung ist, während der von Ihnen verwendete Editor eine völlig andere Verbindung ist. Vielleicht sehen Sie die Objekte für SQL01 im Objekt-Explorer, aber der Code, den Sie in einem Editor ausführen, wird gegen SQL02 ausgeführt. Ich habe dieses Problem im Laufe der Jahre einige Male und nach langem Hin und Her und "Warum nicht es funktioniert?" erkannte meinen Fehler. Im Editor sehen Sie in der unteren rechten Ecke, mit welcher Instanz und Datenbank Sie verbunden sind.
quelle
TL; DR: Möglicherweise haben Sie eine gespeicherte Prozedur, die eine andere gespeicherte Prozedur aufruft, die nicht vorhanden ist.
Ich hatte dieses Problem und fand eine Lösung. Folgendes ist passiert. Ich habe eine gespeicherte Prozedur erstellt:
Ich habe dann eine andere gespeicherte Prozedur erstellt, die die erste ausgeführt hat
Einige Zeit später, ich umbenannt
dbo.MyProc
zudbo.MyProc2
. Nach dem Umbenennen, als ich versucht habe anzurufendbo.MyProcCaller
, erhalte ich folgende Fehlermeldung:Meine Lösung bestand darin, meine zweite gespeicherte Prozedur so zu ändern, dass sie den neuen Namen verwendet:
Hier ist eine einfache Möglichkeit, um zu überprüfen, ob Sie dieses Problem haben. Klicken Sie auf, um den Text der gespeicherten Prozedur zu ändern und diesen Text dann auszuführen. Wenn Sie eine Warnung wie diese erhalten, müssen Sie Ihre gespeicherte Prozedur umbenennen:
quelle
Diese Frage ist ein paar Jahre alt, aber ich möchte nur eine andere Möglichkeit für jemanden wie mich einbringen, der sie später gefunden hat.
Ich habe folgenden Befehl ausgeführt: EXEC SP_CONFIGURE 'Agent XPs'
Und der Fehler wurde beschrieben: Meldung 2812, Ebene 16, Status 62, Zeile 1 Die gespeicherte Prozedur 'SP_CONFIGURE' konnte nicht gefunden werden.
Aber dann erinnerte ich mich, dass dieser Server so eingerichtet ist, dass Groß- und Kleinschreibung beachtet wird. Dieser Befehl hat also einwandfrei funktioniert: EXEC sp_configure 'Agent XPs'
HTH
quelle