Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中返回空值的日期函数 创建函数[dbo]。[NewFinishDate] (@HourlyQ decimal(18,2),@TotalQ decimal(18,2), @星期一整数、@星期二整数、@星期三整数、, @星期四整数、@星期五整数、@星期六整数、@星期日整数) 返回日期 作为 开始 声明@DayName nvarchar(10),@DayHour整数, @计算小数(18,2),@日期为日期, @i整数、@Finishdate日期、@Addeddate日期 挑选 @日期=日期添加(日期,-1,[开始日期]) 从…起 [工程量与规划] 而@Calculation_Sql_Sql Server_Database_Function_Date - Fatal编程技术网

SQL Server中返回空值的日期函数 创建函数[dbo]。[NewFinishDate] (@HourlyQ decimal(18,2),@TotalQ decimal(18,2), @星期一整数、@星期二整数、@星期三整数、, @星期四整数、@星期五整数、@星期六整数、@星期日整数) 返回日期 作为 开始 声明@DayName nvarchar(10),@DayHour整数, @计算小数(18,2),@日期为日期, @i整数、@Finishdate日期、@Addeddate日期 挑选 @日期=日期添加(日期,-1,[开始日期]) 从…起 [工程量与规划] 而@Calculation

SQL Server中返回空值的日期函数 创建函数[dbo]。[NewFinishDate] (@HourlyQ decimal(18,2),@TotalQ decimal(18,2), @星期一整数、@星期二整数、@星期三整数、, @星期四整数、@星期五整数、@星期六整数、@星期日整数) 返回日期 作为 开始 声明@DayName nvarchar(10),@DayHour整数, @计算小数(18,2),@日期为日期, @i整数、@Finishdate日期、@Addeddate日期 挑选 @日期=日期添加(日期,-1,[开始日期]) 从…起 [工程量与规划] 而@Calculation,sql,sql-server,database,function,date,Sql,Sql Server,Database,Function,Date,此代码返回空值。我有一个[Quantilities&Planning]表和[StartingDate]列,其中包括日期类型变量。我还尝试返回另一个变量,如nvarchar和integer。问题可能在while循环中 您是否意识到以下声明: Create FUNCTION [dbo].[NewFinishDate] (@HourlyQ decimal(18,2), @TotalQ decimal(18,2), @Monday integer, @Tuesday integer,

此代码返回空值。我有一个
[Quantilities&Planning]
表和
[StartingDate]
列,其中包括日期类型变量。我还尝试返回另一个变量,如
nvarchar
integer
。问题可能在while循环中

您是否意识到以下声明:

Create FUNCTION [dbo].[NewFinishDate]
    (@HourlyQ decimal(18,2), @TotalQ decimal(18,2),
     @Monday integer, @Tuesday integer, @Wednesday integer,
     @Thursday integer, @Friday integer, @Saturday integer, @Sunday integer)
RETURNS date
AS
BEGIN
    DECLARE @DayName nvarchar(10), @DayHour integer,
            @Calculation Decimal(18,2), @Date as date,
            @i integer, @Finishdate date, @Addeddate date

    SELECT 
        @Date = DATEADD(DAY, -1, [Starting date]) 
    FROM
        [Quantities&Planning]

    WHILE @Calculation < @TotalQ 
    BEGIN
        SELECT @i += 1

        SELECT @Addeddate = DATEADD(DAY, @i, @date)
        SELECT @DayName = DATENAME(WEEKDAY, @Addeddate) 

        IF @DayName ='Monday' 
        BEGIN
            set @DayHour = @Monday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Tuesday' 
        begin
            set @DayHour = @Tuesday
            set @Calculation += @HourlyQ*@DayHour
        end

        if @DayName ='Wednesday' 
        begin
            set @DayHour = @Wednesday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Thursday' 
        begin
            set @DayHour = @Thursday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Friday' 
        begin
            set @DayHour = @Friday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Saturday' 
        begin
            set @DayHour = @Saturday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Sunday' 
        begin
            set @DayHour = @Sunday
            set @Calculation += @HourlyQ*@DayHour
        end         
    end     

    SELECT
        @Finishdate = DATEADD(DAY, @i, [Starting date]) 
    FROM
        [Quantities&Planning]

    RETURN @Finishdate
END

SELECT
    [dbo].[NewFinishDate](2,5000,2,2,2,2,2,2,2) as Yekeee 
FROM
    [Quantities&Planning]
将从整个表返回的最后一个
[开始日期]
(减去1天)分配给
@date
?最后一行是任意的,因为select语句中没有ORDER BY子句

分配给
@Finishdate
的操作也一样。。。您可能希望从特定行分配,是吗?然后添加一个适当的
WHERE
子句,该子句仅选择该特定行


第二个问题是,您从未初始化
@i
变量,因此在您运行时它是
NULL

SELECT 
    @Date = DATEADD(DAY, -1, [Starting date]) 
FROM
    [Quantities&Planning]
@i
将在整个过程中保持
NULL
(对
NULL
的操作产生
NULL

您一直使用这个
NULL
值来添加日期,这也会导致
NULL


@计算相同的问题
。。。您需要在使用变量之前初始化它们!并不是因为您声明了一个变量,它们会自动初始化为0(整数和小数)。除非您以不同方式初始化它们,否则它们将初始化为
NULL

您是否意识到以下语句:

Create FUNCTION [dbo].[NewFinishDate]
    (@HourlyQ decimal(18,2), @TotalQ decimal(18,2),
     @Monday integer, @Tuesday integer, @Wednesday integer,
     @Thursday integer, @Friday integer, @Saturday integer, @Sunday integer)
RETURNS date
AS
BEGIN
    DECLARE @DayName nvarchar(10), @DayHour integer,
            @Calculation Decimal(18,2), @Date as date,
            @i integer, @Finishdate date, @Addeddate date

    SELECT 
        @Date = DATEADD(DAY, -1, [Starting date]) 
    FROM
        [Quantities&Planning]

    WHILE @Calculation < @TotalQ 
    BEGIN
        SELECT @i += 1

        SELECT @Addeddate = DATEADD(DAY, @i, @date)
        SELECT @DayName = DATENAME(WEEKDAY, @Addeddate) 

        IF @DayName ='Monday' 
        BEGIN
            set @DayHour = @Monday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Tuesday' 
        begin
            set @DayHour = @Tuesday
            set @Calculation += @HourlyQ*@DayHour
        end

        if @DayName ='Wednesday' 
        begin
            set @DayHour = @Wednesday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Thursday' 
        begin
            set @DayHour = @Thursday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Friday' 
        begin
            set @DayHour = @Friday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Saturday' 
        begin
            set @DayHour = @Saturday
            set @Calculation += @HourlyQ*@DayHour
        end
        else if @DayName ='Sunday' 
        begin
            set @DayHour = @Sunday
            set @Calculation += @HourlyQ*@DayHour
        end         
    end     

    SELECT
        @Finishdate = DATEADD(DAY, @i, [Starting date]) 
    FROM
        [Quantities&Planning]

    RETURN @Finishdate
END

SELECT
    [dbo].[NewFinishDate](2,5000,2,2,2,2,2,2,2) as Yekeee 
FROM
    [Quantities&Planning]
将从整个表返回的最后一个
[开始日期]
(减去1天)分配给
@date
?最后一行是任意的,因为select语句中没有ORDER BY子句

分配给
@Finishdate
的操作也一样。。。您可能希望从特定行分配,是吗?然后添加一个适当的
WHERE
子句,该子句仅选择该特定行


第二个问题是,您从未初始化
@i
变量,因此在您运行时它是
NULL

SELECT 
    @Date = DATEADD(DAY, -1, [Starting date]) 
FROM
    [Quantities&Planning]
@i
将在整个过程中保持
NULL
(对
NULL
的操作产生
NULL

您一直使用这个
NULL
值来添加日期,这也会导致
NULL


@计算相同的问题
。。。您需要在使用变量之前初始化它们!并不是因为您声明了一个变量,它们会自动初始化为0(整数和小数)。除非您以不同的方式初始化它们,否则它们将初始化为
NULL

对于所有分配,最好使用“设置”而不是“选择”。select可以使用空值执行奇怪的操作。从表中拾取值时,我不能使用set。我也试过set,但还是一样。我不禁想知道是否应该删除您查询中[Quantilities&Planning]中出现的
。我看不到您实际使用了
[数量与计划]
中的任何值。对于所有作业,最好使用“设置”而不是“选择”。select可以使用空值执行奇怪的操作。从表中拾取值时,我不能使用set。我也试过set,但还是一样。我不禁想知道是否应该删除您查询中[Quantilities&Planning]
中出现的
。我看不到您实际使用了
[Quantilities&Planning]
中的任何值。声明@Calculation Decimal(18,2)=0,@I integer=0这更正了我的功能。谢谢你的回答。声明@Calculation Decimal(18,2)=0,@i integer=0这更正了我的功能。谢谢你的回答。