기본 매개 변수가 있는 저장 프로시저
미리 정의된 매개 변수를 사용하여 작성한 쿼리를 기반으로 저장 프로시저를 생성하려고 합니다.
저장 프로시저를 생성하도록 재구성하고 저장 프로시저를 실행하면 매개 변수가 제공되지 않았다고 표시됩니다.누가 이유를 말해줄 수 있나요?
저는 제가 중요한 것을 놓쳤다는 것을 알고 있지만, 코드를 엉망으로 만든 후에 전문가들의 도움이 필요한 지경에 이르렀습니다.
다음은 내 코드입니다(약칭).
Alter Procedure [Test]
@StartDate AS varchar(6),
@EndDate AS varchar(6)
AS
Set @StartDate = '201620' --Define start YearWeek
Set @EndDate = (SELECT CAST(DATEPART(YEAR,getdate()) AS varchar(4)) + CAST(DATEPART(WEEK,getdate())-1 AS varchar(2)))
SELECT
*
FROM
(SELECT DISTINCT
[YEAR], [WeekOfYear]
FROM
[dbo].[DimDate]
WHERE
[Year] + [WeekOfYear] BETWEEN @StartDate AND @EndDate) dimd
LEFT JOIN
[Schema].[Table1] qad ON (qad.[Year] + qad.[Week of the Year]) = (dimd.[Year] + dimd.WeekOfYear)
절차를 실행하면 다음과 같은 메시지가 나타납니다.
Msg 201, 레벨 16, 상태 4, 절차 테스트, 라인 0
프로시저 또는 함수 'test'는 제공되지 않은 매개 변수 '@StartDate'를 예상합니다.
미리 정의된 매개변수를 사용하여 작성했습니다.
코드 내부 어딘가에서 논리적으로 "사전 정의"되지 않습니다.그러나 SP의 인수로는 기본값이 없으며 필수입니다.이러한 매개 변수가 명시적으로 전달되지 않도록 하려면 SP 정의에서 기본값을 정의해야 합니다.
Alter Procedure [Test]
@StartDate AS varchar(6) = NULL,
@EndDate AS varchar(6) = NULL
AS
...
NULL 또는 빈 문자열 또는 더 합리적인 것은 사용자에게 달려 있습니다.SP의 첫 번째 줄에서 해당 인수의 값을 덮어쓰므로 문제가 되지 않습니다.
이제 인수를 전달하지 않고 호출할 수 있습니다.exec dbo.TEST
저는 두 가지 방법 중 하나를 택하겠습니다.당신이 당신의 t-sql 코드에서 시작일과 종료일을 설정하고 있기 때문에, 나는 저장된 프로시저에 파라미터를 요청하지 않을 것입니다.
옵션 1
Create Procedure [Test] AS
DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)
Set @StartDate = '201620' --Define start YearWeek
Set @EndDate = (SELECT CAST(DATEPART(YEAR,getdate()) AS varchar(4)) + CAST(DATEPART(WEEK,getdate())-1 AS varchar(2)))
SELECT
*
FROM
(SELECT DISTINCT [YEAR],[WeekOfYear] FROM [dbo].[DimDate] WHERE [Year]+[WeekOfYear] BETWEEN @StartDate AND @EndDate ) dimd
LEFT JOIN [Schema].[Table1] qad ON (qad.[Year]+qad.[Week of the Year]) = (dimd.[Year]+dimd.WeekOfYear)
옵션 2
Create Procedure [Test] @StartDate varchar(10),@EndDate varchar(10) AS
SELECT
*
FROM
(SELECT DISTINCT [YEAR],[WeekOfYear] FROM [dbo].[DimDate] WHERE [Year]+[WeekOfYear] BETWEEN @StartDate AND @EndDate ) dimd
LEFT JOIN [Schema].[Table1] qad ON (qad.[Year]+qad.[Week of the Year]) = (dimd.[Year]+dimd.WeekOfYear)
그럼 실행exec test '2016-01-01','2016-01-25'
언급URL : https://stackoverflow.com/questions/38149156/stored-procedure-with-default-parameters
'programing' 카테고리의 다른 글
도커 파일에서 'COPY' 명령과 'ADD' 명령의 차이점은 무엇입니까? (0) | 2023.08.20 |
---|---|
UITableView에서 셀을 선택할 수 없도록 만드는 방법은 무엇입니까? (0) | 2023.08.20 |
브라우저별 AJAX(XmlHttpRequest) 시간 초과 길이 (0) | 2023.08.20 |
'computer-instance'는 동일한 이미지에 대해 여러 인스턴스를 생성합니다. (0) | 2023.08.20 |
복제되지 않은 DB에 쓰는 경우 MariaDB(10.5.8) Galera 클러스터 노드의 GTID가 동기화되지 않음 (0) | 2023.08.20 |