저장 프로 시저가 MS SQL Server Management Studio에서 생성되었지만 "저장 프로 시저를 찾을 수 없습니다"


21

testtable데이터베이스 내부 에 테이블을 만들었습니다testbase 다음과 같은 구조를 가진 .

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

Microsoft SQL Server 2008 Management Studio를 사용했습니다.

testtable_pricesmaller다음과 같이 저장 프로 시저 를 만들었습니다.

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

Object ExplorerMicrosoft SQL Server Management Studio 에서 저장 프로 시저를 볼 수 있습니다 . (의 다음 트리 구조에 나열되어 있습니다 Object Explorer)

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

다음과 같은 오류가 발생하면 매우 이상합니다.

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

다음 SQL 문을 실행할 때

execute dbo.testtable_pricesmaller 50

무엇을 놓칠 수 있습니까?


"testbase"데이터베이스의 컨텍스트에서 execute 문이 실행되고 있는지 확인 했습니까? USE 문을 추가하거나 완전한 오브젝트 이름을 시도 할 수 있습니다.
Shawn Melton

예, USE진술을 추가 했지만 오류가 발생합니다.
Jack

실행 명령문에서 데이터베이스 이름을 명시 적으로 정의해야했습니다. EXEC [testbase]. [dbo]. [testtable_pricesmaller] 50
Jroonk

답변:


17

IntelliSense Refresh 로컬 캐시가이를 수정해야합니다


7

새 스토어드 프로 시저를 추가 한 후 데이터베이스를 다시 시작할 필요는 없지만 오브젝트 탐색기를 새로 고쳐서 볼 수 있습니다.

다음에 스토어드 프로 시저를 추가 할 때 오브젝트 탐색기에서 마우스 오른쪽 단추로 실행 옵션을 실행하고 매개 변수를 입력하고 실행되는지 확인하십시오. 실행되지 않으면 문제가 무엇인지 잘 모르겠습니다. 실행되면 SQL이 잘못된 데이터베이스에서 쿼리하려고하는 것과 같은 간단한 것일 수 있습니다.


4

마침내 메시지가 MS SQL Server Management Studio에 나타나는 이유를 알고 있습니다.

MS SQL Server Management Studio에서는 저장 프로 시저를 만든 후 다시 시작해야합니다.

MS SQL Server Management Studio를 다시 시작한 후에는 더 이상 그러한 오류가 없습니다.

(이상하게, 저장 프로 시저를 만들 때마다 다시 시작해야합니까?)


12
다시 시작할 필요는 없습니다.
Shawn Melton

1
@ShawnMelton MS SQL Server Management Studio를 닫고 MS SQL Server Management Studio를 다시 엽니 다. 나는 그것을 닫았다가 다시 열어야한다는 것이 아주 이상하다고 생각합니다. 누락 된 MS SQL Server Management Studio (SSMS) 구성이있어 SSMS가 저장 프로 시저가 이미 생성되었음을 반영 할 수 없습니까?
Jack

5
IntelliSense는 당신이 한 일 중 유일하게 뒤처진 부분입니다. exec 문을 실행하면 SSMS를 다시 시작하지 않아도 작동했을 것입니다. 작동하지 않는 데 도움이되는 다른 것이 있습니다. @ShawnMelton에 동의합니다.
토마스 스트링거

@Shark, 재미있는! 내 SSMS가 내가 왜 그렇게 이상하게 행동하는 지 설명해 주시면 감사하겠습니다.
Jack

6
나중에 참조 할 수 있도록 Ctrl-Shift-R은 인텔리전스를 위해 로컬 캐시를 새로 고칩니다.
Adam Scharp 2016 년

3

작성 명령은

create procedure dbo.testtable_pricesmaller
    @pricelimit money

dbo.프로 시저 이름 앞에 누락되었습니다 . 프로 시저를 작성할 때마다 프로 시저 이름으로 사용자 / 스키마를 명시 적으로 정의하는 것이 좋습니다. 즉, 프로 시저 이름에는 완전한 서명이 있어야합니다.

이것이 도움이되기를 바랍니다.


3

SQL Server 2008에서 Windows 계정으로 로그인 할 때 SYSADMIN 보안 수준이없는 경우 스키마를 명시 적으로 지정하지 않고 개체를 만들면 [DOMAIN \ username]에서 개체를 만들거나 만들 수 있습니다. [ObjectName ] 대신 [dbo]. [ObjectName] 대신 SQL Server 2012에서 수정되었습니다.

사용자의 보안 수준을 줄 였을 때이 문제가 발생했으며 그가 실행중인 절차 중 하나가 스키마없이 테이블을 삭제하고 다시 작성하는 것이 었으므로 나머지 절차는 객체에 다시 액세스 할 수 없으므로 충돌했습니다. . 이제 테이블이 자신의 도메인 사용자 이름으로 생성되었습니다.

이 동작에 대한 Microsoft 게시물은 다음과 같습니다.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 ( "암시 적 스키마 및 사용자 생성"섹션 참조)

dbo 스키마에서 테이블이 작성되지 않음

Windows 사용자가 테이블을 만들 때 SQL 2008 R2가 사용자 / 스키마를 만듭니다.

간단히 말해 데이터베이스 문제가 있거나 (데이터베이스에 테이블을 만들지 만 다른 테이블에서 액세스하려고하면) 방금 설명한 것과 같은 문제가 있습니다.


2

나는 이것이 오래되었다는 것을 안다. 나는이 같은 문제에 대한 해결책을 찾고있는 동안이 질문을 보았 으며이 질문을 찾는 다른 사람들을 돕기 위해이 답변을 게시하고 있습니다.

제 경우에는 공유 데이터 소스를 사용하여 SSRS 보고서를 실행하는 동안 오류 메시지가 나타납니다. 이 공유 데이터 소스는 기본 데이터베이스 (Default Catalog = 매개 변수)를 지정하지 않았으며 비밀번호가 없기 때문에 연결 문자열에 추가 할 수 없었습니다 (SSRS 데이터 소스에서 무언가를 변경하면 비밀번호를 다시 입력하기를 원합니다).

이를 해결하기 위해 SQL Server 인스턴스의 로그인 기본 데이터베이스를 마스터에서 보고서가 실행하려는 저장 프로 시저가 포함 된 데이터베이스로 변경했습니다.

SSMS에서 항목을 실행할 때 개체 탐색기 창은 하나의 연결이며 편집기는 완전히 다른 연결입니다. 개체 탐색기에서 SQL01에 대한 개체가 표시 될 수 있지만 편집기에서 실행중인 코드는 SQL02에 대해 실행됩니다. 몇 년 동안이 문제는 몇 년에 걸쳐 많이 발생했습니다. 작동합니까? " 내 실수를 깨달았다. 편집기의 경우 오른쪽 하단에서 연결된 인스턴스 및 데이터베이스를 확인하십시오.


1

TL; DR : 존재하지 않는 다른 저장 프로 시저를 호출하는 저장 프로 시저가있을 수 있습니다.


나는이 문제가 있었고 해결책을 찾았다. 여기에 일어난 일이 있습니다. 하나의 저장 프로 시저를 만들었습니다.

create procedure dbo.MyProc
    ...

그런 다음 첫 번째 저장 프로 시저를 실행하는 다른 저장 프로 시저를 만들었습니다.

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

얼마 후, 나는로 이름 dbo.MyProc을 바꿨다 dbo.MyProc2. 이름을 바꾼 후을 호출하려고 dbo.MyProcCaller하면이 오류 메시지가 나타납니다.

exec dbo.MyProcCaller

저장 프로 시저 'RLM.usp_getSecondaryRestrictedLists_Old'를 찾을 수 없습니다.

내 해결책은 새 이름을 사용하도록 두 번째 저장 프로 시저를 변경하는 것이 었습니다.

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

이 문제가 있는지 확인하는 간단한 방법은 다음과 같습니다. 저장 프로 시저의 텍스트를 수정하려면 클릭 한 다음 해당 텍스트를 실행하십시오. 이와 같은 경고가 표시되면 저장 프로 시저의 이름을 바꿔야합니다.

'dbo.MyProcCaller'모듈은 누락 된 개체 'dbo.MyProc'에 따라 다릅니다. 모듈은 여전히 ​​생성됩니다. 그러나 오브젝트가 존재할 때까지 실행할 수 없습니다.

(1 개의 행이 영향을 받음)


0

이 질문은 몇 살이지만, 나중에 그것을 찾은 나와 같은 누군가를 위해 또 다른 가능성을 던지고 싶습니다.

이 명령을 실행했습니다. EXEC SP_CONFIGURE '에이전트 XP'

오류 2812, 수준 16, 상태 62, 줄 1에 설명 된 오류가 발생했습니다. 'SP_CONFIGURE'저장 프로 시저를 찾을 수 없습니다.

그러나이 서버는 대소 문자를 구분하도록 설정되어있었습니다. 따라서이 명령은 제대로 작동했습니다. EXEC sp_configure 'Agent XPs'

HTH

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.