2017-09-28 29 views
0

내가이SQL 서버 2000 :

ALTER PROC [dbo].[SP_COMP] 
    (@comp_seq INT, 
    @channel VARCHAR(10), 
    @comp_type VARCHAR(10), 
    @periode_awal DATETIME, 
    @periode_akhir DATETIME, 
    @period_type VARCHAR(20), 
    @rn_from DATETIME, 
    @mode int) 

같은 저장 프로 시저를 만들어 공급되지 않은 매개 변수를 기대하고 나는 그것을 실행합니다

EXEC [SP_COMP] 16, 'A', '', '2017-07-16', '2017-07-31', 'MONTH_END', '2017-07-01', 6 

을하지만 난이 오류 :

메시지 167, 수준 16, 상태 3, 절차 SP_COMP, 줄 0
절차 'SP_COMP'가 필요합니다. 매개 변수 '@rn_from'이 제공되지 않았습니다

내 프로 시저에 문제가 있습니까?

+2

문제는 코드의 다른 부분에 있어야합니다. 당신이 사용한 것과 똑같은 헤더를 가진 프로 시저를 만들면, 오류없이 당신이 제공 한 명령으로 프로 시저를 실행할 수 있습니다. 전체 코드를 제공 할 수 있습니까? – Tyron78

+0

어쩌면 보이지 않는 문자가 잘못 해석 될 수 있습니다 ... – clementakis

+0

datetime 변수를 만들어이 변수를 사용하여 프로 시저 – GuidoG

답변

0

사용하는 접두사 SP_에는 하나의 문제점이있을 수 있습니다.
http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix
볼이 https://msdn.microsoft.com/en-us/library/ms190669(v=sql.105).aspx

또한 절차에 전달 날짜 변수를 생성하려고.
또한 항상
http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput

declare @periode_awal DATETIME = '20170716' 
declare @periode_akhir DATETIME = '20170731' 
declare @rn_from DATETIME = '20170701' 

EXEC [dbo].[SP_COMP] 16, 'A', '', @periode_awal, @periode_akhir, 'MONTH_END', @rn_from, 6 

가 나는 또한 값 ''로 테이블을 채우기하지 않는 것이 좋습니다이 문서를보다 효율적으로 사용 널 (null)를 참조, 날짜 시간 값에 대한 언어 중립적 인 형식을 사용

편집
절차를 변경하고 하나의 세션에서 호출하면 두 문장 사이에 GO를 추가하십시오.

ALTER PROC [dbo].[SP_COMP](
    @comp_seq INT, 
    @channel VARCHAR(10), 
    @comp_type VARCHAR(10), 
    @periode_awal DATETIME, 
    @periode_akhir DATETIME, 
    @period_type VARCHAR(20), 
    @rn_from DATETIME, 
    @mode int 
) 

GO -- always put this after an alter or create statement 

declare @periode_awal DATETIME = '20170716' 
declare @periode_akhir DATETIME = '20170731' 
declare @rn_from DATETIME = '20170701' 

EXEC [dbo].[SP_COMP] 16, 'A', '', @periode_awal, @periode_akhir, 'MONTH_END', @rn_from, 6