簡體   English   中英

SQL Server-如何帶回函數中的WHILE BREAK循環以及其結果?

[英]SQL Server - How to bring back and the result of a WHILE BREAK Loop in a function?

我有這段有效的代碼

DECLARE @IntDte as INT
SET @IntDte = 1
WHILE @IntDte <=10
BEGIN
IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
            BREAK
            ELSE
        SET @IntDte= @IntDte + 1        
END
PRINT @IntDte

這將帶回最后一個整數,該整數將帶回最后一個工作日(即,如果今天是星期一,則循環將帶回4,因為那是星期五。

我想盡力而為的是將其構建為獲取日期的函數。 我到目前為止有這個,但它不正確-

Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
DECLARE @PWD as datetime

SET @PWD = GetDate() -
(DECLARE @IntDte as INT
SET @IntDte = 2
WHILE @IntDte <=10
BEGIN
IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
            BREAK
            ELSE
        SET @IntDte= @IntDte + 1        
END
RETURN)

RETURN @PWD
END

在當前出現語法錯誤的情況下,任何人都可以指出錯誤之處-

消息102,級別15,狀態1,過程PREVIOUSWORKINGDAY,第2行'RETURNS'附近的語法不正確。

消息156,級別15,狀態1,過程PREVIOUSWORKINGDAY,第7行關鍵字'DECLARE'附近的語法錯誤。

消息102,級別15,狀態1,過程PREVIOUSWORKINGDAY,第16行')'附近的語法不正確。

消息178,級別15,狀態1,過程PREVIOUSWORKINGDAY,第18行在這種情況下不能使用帶有返回值的RETURN語句。

我以為我在錯誤的地方放了一些東西,但不確定應該去哪里。

謝謝

SQL的問題似乎是您有兩個return語句,並且您試圖嵌入聲明語句。 這是我重新編寫您的版本的方法:

Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
    DECLARE @PWD as datetime
    DECLARE @IntDte as INT

    SET @IntDte = 2
    WHILE @IntDte <=10
    BEGIN
        IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
            BREAK
        ELSE
            SET @IntDte= @IntDte + 1        
    END

    SET @PWD = GetDate() - IntDte

    RETURN @PWD
END

我就是這樣寫的。

Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
    DECLARE @PWD as datetime

        SELECT @PWD=Max(date)
        FROM Calendar
        WHERE isworkday=1
        AND date<CONVERT(DATE,GETDATE())

    RETURN @PWD
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM