2012-08-13 43 views
0

我正在開發一個Web應用程序,它將允許用戶輸入開始日期和結束日期。因爲我希望稍後在日曆中顯示,我相信我需要將開始日期和結束日期之間的每個日期插入到數據庫表中。例如: 01/01/2012 02/01/2012 03/01/2012 04/01/2012使用ASP.NET c將日期範圍插入到SQL Server中#

是否有這樣做,當我剛剛開始日期和結束日期的一種簡單的方法,例如01/01/2012和04/01/2012?

感謝

+0

使用一個採用開始和結束日期的存儲過程,或者因爲您已經在運行asp.net,只需從循環中調用INSERT即可。 – 2012-08-13 17:06:22

+0

WHYT? (你有什麼嘗試?) – 2012-08-13 17:07:16

+0

請使用明確的日期格式(例如'YYYYMMDD')。你現在進入哪個國家並不是很明顯,因此無論是04/01/2012是4月1日還是1月4日。你可以通過多讀一些,但爲什麼要這麼做? – 2012-08-13 17:18:05

回答

0

我質疑是否有必要根據你們所要求的做到這一點,但是,這是怎麼了:

DECLARE @InsertDate DATETIME = @StartDate; 
WHILE @InsertDate <= @EndDate 
BEGIN 
    INSERT dbo.MyTable (Date) VALUES (@InsertDate) 
    SET @InsertDate = @InsertDate + 1 --SQL does implicit conversion from integer to date (1 = 1 day) 
END 

編輯:解決意見,這也是有效的(可能推薦,雖然我從未遇到與DATETIME一起使用時的隱式轉換

SET @InsertDate = dateadd(d, 1, @InsertDate) 
+0

我建議不要使用隱式速記。例如,這不適用於'DATE'。只需輸入'DATEADD',它會更安全,並且不會改變您的計費時間。 – 2012-08-13 17:11:01

+0

因爲您沒有使用DATE,DATETIME2或TIME或DATETIMEOFFSET嘗試隱式轉換,所以您從來沒有遇到過任何問題。 – 2012-08-13 17:14:28

1

比一個循環相反,你可以嘗試:

;WITH x(n) AS 
(
    SELECT TOP (DATEDIFF(DAY, @StartDate, @EndDate) + 1) 
    ROW_NUMBER() OVER (ORDER BY [object_id]) - 1 
    FROM sys.all_objects 
) 
-- INSERT dbo.table_name(date_column) 
SELECT DATEADD(DAY, n, DATEADD(DAY, DATEDIFF(DAY, '19000101', @StartDate), '19000101')) 
FROM x; 

此外,如果2000+天是不是足夠大的擺動,你(註釋掉INSERT當你信任的邏輯和輸出)。可能會更改爲sys.all_columns(7500+)或使用您自己的數字表。