it-swarm-eu.dev

"Nelze najít uloženou proceduru", i když byla uložená procedura vytvořena v MS SQL Server Management Studio

Vytvořil jsem tabulku testtable uvnitř databáze testbase, která má následující strukturu:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

které jsem použil Microsoft SQL Server 2008 Management Studio.

Vytvořil jsem uloženou proceduru testtable_pricesmaller jak následuje

use testbase
go
create procedure testtable_pricesmaller
    @pricelimit money
as
select * from testtable where price = @pricelimit;
go

a jsou schopni zobrazit uložené procedury na Object Explorer Microsoft SQL Server Management Studio. (Je uveden v následující stromové struktuře Object Explorer)

Databases
    + testbase
        + Tables
            + dbo.testtable
        + Programmability
            + Stored Procedures
                + dbo.testtable_pricesmaller

Je mi velmi zvláštní, když se mi zobrazí následující chyba:

Could not find the stored procedure 'dbo.testtable_pricesmaller'.

když provedu následující příkaz SQL:

execute dbo.testtable_pricesmaller 50

Co by mohlo chybět?

21
Jack

Nakonec vím, proč se zpráva objevuje v MS SQL Server Management Studio.

Po vytvoření uložené procedury v MS SQL Server Management Studio je třeba jej restartovat.

Po restartování MS SQL Server Management Studio již žádná taková chyba neexistuje.

(Podivné, znamená to, že pokaždé, když vytvořím uloženou proceduru, musím ji restartovat?)

4
Jack

 IntelliSense Refresh local Cache by ji měla opravit

19
user63684

Po přidání nové uložené procedury by nemělo být nutné restartovat databázi, i když ji budete muset aktualizovat, abyste ji tam mohli zobrazit.

Při příštím přidání uložené procedury zkuste spustit spouštění pravým tlačítkem myši z objektu Průzkumník a zadejte své parametry a podívejte se, zda se spustí. Pokud neběží, nejsem si jistý, jaký je váš problém. Pokud se spustí, mohlo by to být něco jednoduchého, jako se SQL pokouší dotazovat z nesprávné databáze.

7
Zane

Příkaz create by měl být

create procedure dbo.testtable_pricesmaller
    @pricelimit money

chybíš dbo. před názvem postupu. Kdykoli vytvoříte proceduru, je vhodné explicitně definovat uživatele/schéma s názvem procedury, tj. Název procedury by měl mít plně kvalifikované podpisy.

Doufám, že vám to pomůže.

3
Saim Saboor

V SQL Server 2008, když jste přihlášeni pod účtem Windows, pokud nemáte úroveň zabezpečení SYSADMIN, když vytvoříte objekt bez explicitního zadání schématu, může/vytvoří jej pod [DOMAIN\username]. [ObjectName ] namísto [dbo]. [ObjectName] (myslím, že to bylo opraveno v SQL Server 2012).

Měl jsem tento problém se mi stalo, když jsem snížil úroveň zabezpečení uživatele, a jeden z postupu, který vykonával, byl vynechání a opětovné vytvoření tabulek bez schématu, takže zbytek procedury selhal, protože nemohl znovu získat přístup k objektu . Ukázalo se, že tabulky byly nyní vytvořeny pod jeho uživatelským jménem domény.

Zde je příspěvek společnosti Microsoft o tomto chování:

https://docs.Microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (vyhledejte sekci " Implicitní schéma a vytvoření uživatele “)

Tabulka se nevytváří ve schématu dbo

SQL 2008 R2 vytvoří uživatele/schéma, když uživatel Windows vytvoří tabulky

Stručně řečeno, pravděpodobně máte buď problém s databází (vytvoříte tabulku v databázi, ale zkuste ji získat z jiného), nebo máte problém, jak jsem právě popsal.

3
Philippe

Vím, že je to staré; Tuto otázku jsem narazil, když jsem hledal řešení tohoto stejného problému, a tuto odpověď zveřejňuji v naději, že to pomůže ostatním, kteří tuto otázku také najdou.

V mém případě se při spuštění sestavy SSRS pomocí sdíleného zdroje dat zobrazila chybová zpráva. Tento sdílený zdroj dat nespecifikoval výchozí databázi (výchozí katalog = parametr) a nemohl jsem jej přidat do připojovacího řetězce, protože nemám heslo (a když něco změníte ve zdroji dat SSRS, má tendenci chcete znovu zadat heslo).

Abych to vyřešil, změnil jsem výchozí databázi pro přihlášení v instanci serveru SQL z předlohy na databázi obsahující uloženou proceduru, kterou chtěla sestava spustit.

Při spouštění věcí z SSMS mějte na paměti, že podokno Průzkumníka objektů je jedno připojení, zatímco jakýkoli editor, který máte, je úplně jiné. Takže můžete vidět objekty pro SQL01 v Object Explorer, ale kód, který spouštíte v editoru, bude spuštěn proti SQL02 - do tohoto problému jsem se dostal několikrát v průběhu let a po mnoha nárocích a „Proč ne funguje to? “ uvědomil si moji chybu. V editoru se podívejte do pravého dolního rohu a zjistěte, ke které instanci a databázi jste připojeni.

2
S M

TL; DR: Možná máte uloženou proceduru, která volá jinou uloženou proceduru, která neexistuje.


Měl jsem tento problém a našel opravu. Tady se stalo. Vytvořil jsem jednu uloženou proceduru:

create procedure dbo.MyProc
    ...

Poté jsem vytvořil další uloženou proceduru, která provedla první

create procedure dbo.MyProcCaller
    ...
    exec dbo.MyProc
    ...

O něco později jsem přejmenoval dbo.MyProc to dbo.MyProc2. Po přejmenování, když jsem se pokusil zavolat dbo.MyProcCaller, Dostanu tuto chybovou zprávu:

exec dbo.MyProcCaller

Uloženou proceduru 'RLM.usp_getSecondaryRestrictedLists_Old' nelze najít.

Mým řešením bylo změnit mou druhou uloženou proceduru tak, aby používala nové jméno:

create procedure dbo.MyProcCaller
    ...
    exec dbo.MyProc2
    ...

Zde je jednoduchý způsob, jak zkontrolovat, zda máte tento problém. Klepnutím upravte text uložené procedury a spusťte tento text. Pokud se zobrazí upozornění jako je tato, je třeba přejmenovanou uloženou proceduru přejmenovat:

Modul 'dbo.MyProcCaller' závisí na chybějícím objektu 'dbo.MyProc'. Modul bude stále vytvořen; nelze jej však úspěšně spustit, dokud objekt neexistuje.

(Ovlivněno 1 řádků)

1
user2023861

Tato otázka je několik let stará, ale chci jen hodit jinou možnost pro kohokoli, jako jsem já, který ji našel později.

Spustil jsem tento příkaz: EXEC SP_CONFIGURE 'Agent XPs'

A byla popsána chyba: Zpráva 2812, úroveň 16, stav 62, řádek 1 Nelze najít uloženou proceduru 'SP_CONFIGURE'.

Ale pak jsem si vzpomněl, že tento server je nastaven tak, aby rozlišoval velká a malá písmena. Tento příkaz tedy fungoval dobře: EXEC sp_configure 'Agent XPs'

HTH

0
jrdevdba