我已經存儲了proc,它檢查日期是否不在工作日,並在需要時進行更改。我在下面的視覺工作室中調用這個過程。但是,當proc運行時,我收到The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
消息。當我在SQL Server Management Studio中使用與Visual Studio中使用的值相同的值運行相同的過程時,它可以工作。將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值 - 存儲過程
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
我喜歡下面設置參數查詢:
List<SqlParameter> parameters = new List<SqlParameter>()
{
new SqlParameter("TargetDate", SqlDbType.VarChar, 30){ Value = input.date}
};
凡input.date
是一個字符串= 2014年9月30日
我想你'input.date'包含日期值以這種形式 - **「30/09/2014(日/月/年)「**。但最好在sql標準格式中傳遞日期爲 - **「yyyy-mm-dd」**。這可能會解決您的問題。 – 2014-10-01 11:04:33
@KrishnrajRana,** yyyy-mm-dd不是sql標準!**'2014-10-01'在歐洲成爲1月10日。使用** yyyymmdd ** – adrianm 2014-10-01 11:14:28