SQL行插入:使用静态值确定日期值

问题描述 投票:0回答:1

我正在将生产订单插入带有通过Microsoft PowerApps调用的存储过程的SQL数据库中。当前,“构建日期”列仅使用今天的日期作为构建日期。以下是记录示例:

enter image description here

您可以看到,所有这10个订单都以今天的日期作为设置的生成日期。但是,我想根据当天的必要输出动态设置此构建日期。这很可能将变量传递给存储过程。例如,如果构建输出为每天5个,则第1-5行的构建日期为'02 / 17/2020',而接下来的5行的构建日期为'02 / 18/2020'。

这很简单,因为构建输出可将订单数整除。但是,假设构建输出为3而不是5。前三个订单为'02 / 17/2020',接下来的三个订单为'02 / 18/2020',接下来的三个订单为'02 / 19 / 2020'。这将使一个订单设置为“ 02/20/2020”。然后,如果我添加了更多订单,它将在每个日期堆叠起来,最多填充3个。是否可以通过存储过程来执行此操作?

sql tsql ssms
1个回答
0
投票

您可能需要进行一些调整,但是根据我的理解,这可以解决问题([Date]是上面示例表中的日期列:]

CREATE PROC yourProcName @pNUM AS INT = 1 --PARAMETER
AS
(
    DECLARE @pDate DATE = CONVERT(DATE, GETDATE());
    SET @pDate = (SELECT TOP 1 CONVERT(DATE, MAX([Date])) FROM yourDestTable);
    DECLARE @pLead INT = (SELECT TOP 1 COUNT(*) FROM yourDestTable WHERE [Date] = @pDate;
    WITH cte
    AS
    (
        SELECT *,
        FLOOR((
                ROW_NUMBER() OVER(ORDER BY @pDate) -
                0.001)/@pNUM) AS RN
        FROM yourSourceTable
    )
    INSERT INTO yourDestTable
    SELECT
        C.*,
        DATEADD(DAY, LEAD(C.RN, @pLead), @pDate) AS [Date]
    INTO yourDestTable
    FROM cte AS C
)

然后像这样EXEC yourProcName <number of transactionsday>称呼它>

© www.soinside.com 2019 - 2024. All rights reserved.