[英]Using while loop in T-SQL function
這里是非數據庫程序員。 碰巧是這樣,我需要在T-SQL中創建一個函數,該函數返回給定日期之間的工作日計數。 我認為最簡單的方法是使用while循環。 問題是,一旦我寫類似
while @date < @endDate
begin
end
該語句將不會執行,聲稱“關鍵字'return'附近的語法不正確”(不是很有幫助)。 哪里出問題了?
PS完整代碼:
ALTER FUNCTION [dbo].[GetNormalWorkdaysCount] (
@startDate DATETIME,
@endDate DATETIME
)
RETURNS INT
AS
BEGIN
declare @Count INT,
@CurrDate DATETIME
set @CurrDate = @startDate
while (@CurrDate < @endDate)
begin
end
return @Count
END
GO
與某些語言不同,SQL Server中的BEGIN
/ END
對不能為空-它們必須至少包含一個語句。
至於您的實際問題-您已經說過自己不是數據庫程序員。 大多數SQL初學者傾向於走同一條路-嘗試編寫過程代碼來解決問題。
鑒於SQL是一種基於集合的語言-通常最好找到一個基於集合的解決方案,而不是使用循環。
在這種情況下,日歷表將是真正的幫助。 該表每個日期包含一行,另外的列則指示對您的業務有用的信息(例如您認為是工作日的信息)。 然后,您的工作日查詢如下所示:
SELECT COUNT(*) from Calendar
where BaseDate >= @StartDate and BaseDate < @EndDate and IsWorkingDay = 1
填寫“日歷”表成為一項一次性的練習,您可以輕松地為其填充例如30年的日期。
在SQL Server中使用任何循環絕不是一個好主意:)
幾乎沒有更好的解決方案,請參考已經在StackOverflow上提出的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.