날짜가 근무일이 아닌지 확인하고 nessecary 인 경우이를 변경하는 proc가 저장되어 있습니다. 아래의 비주얼 스튜디오에서이 프로 시저를 호출합니다. 그러나 proc 실행하면 나는 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
메시지를받습니다. Visual Studio에서 동일한 값을 사용하여 SQL Server Management Studio에서 동일한 proc을 실행하면 작동합니다.varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 발생 함 - 저장 프로 시저
ALTER PROCEDURE [dbo].[usp_PSTN_GetWorkingDay]
@TargetDate VARCHAR(30)
AS
BEGIN
SET NOCOUNT ON;
/* Workout 10 working days from present date */
DECLARE @MaxDateCantBook DATETIME
;WITH DatesCTE AS
(
SELECT Date_Id,
Date_Date,
Date_JDE,
Is_WorkingDay,
ROW_NUMBER() OVER(ORDER BY Date_Date) AS rn
FROM dbo.Dates
WHERE Is_WorkingDay = 1
AND Date_Date > GETDATE()
)
SELECT @MaxDateCantBook = (SELECT Date_Date FROM DatesCTE WHERE rn = 10)
/* Change Target date if it is less than 10 working days in the future */
IF(@TargetDate <= @MaxDateCantBook)
BEGIN
SET @TargetDate = @MaxDateCantBook
END
SELECT Date_Date
FROM dbo.Dates
WHERE Date_Date >= @TargetDate
AND Date_Date <= (SELECT MIN(Date_Date)
FROM dbo.Dates
WHERE Is_WorkingDay != 0 AND Date_Date >= @TargetDate)
ORDER BY Date_Date DESC
END
나는 다음과 같은 쿼리에 대한 매개 변수를 설정 해요 :
input.date
문자열입니다
List<SqlParameter> parameters = new List<SqlParameter>()
{
new SqlParameter("TargetDate", SqlDbType.VarChar, 30){ Value = input.date}
};
= 2014년 9월 30일
당신'이 형식으로 날짜 값을 포함 input.date' - ** "30/09/2014 (dd/mm/yyyy) "**. 그러나 SQL 표준 형식 인 - ** "yyyy-mm-dd"**로 날짜를 전달하는 것이 더 좋습니다. 이렇게하면 문제가 해결 될 수 있습니다. –
@KrishnrajRana, ** yyyy-mm-dd는 SQL 표준이 아닙니다! ** '2014-10-01'은 유럽에서 1 월 10 일이됩니다. ** yyyymmdd ** – adrianm