SQL 服务器插入:使用静态值确定日期值

SQL Server insert: using a static value to determine date value

我正在将生产订单插入 SQL 服务器数据库,其中包含一个通过 Microsoft PowerApps 调用的存储过程。目前,构建日期列仅使用今天的日期作为构建日期。下面附上记录样本:

如您所见,所有这 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 个。有没有办法通过存储过程来做到这一点?

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

CREATE PROC yourProcName @pNUM AS INT = 1 --PARAMETER
AS
(
    DECLARE @pDate DATE;
    SET @pDate = COALESCE((SELECT TOP 1 CONVERT(DATE, MAX([Date])), GETDATE()) FROM yourDestTable); --SETTING THE DATE AS MAX DATE ALREADY EXISTS IN THE TABLE. IF NOTHING IS THERE, WE'LL USE TODAY
    DECLARE @pLead INT = COALESCE((SELECT TOP 1 COUNT(*) FROM yourDestTable WHERE [Date] = @pDate), 0);--SEE HOW MANY RECORDS IN THE DATABASE EXIST WITH THE DATE WE DEFINED
    WITH cte
    AS
    (
        SELECT *,
        FLOOR((
                ROW_NUMBER() OVER(ORDER BY @pDate) -
                0.001)/@pNUM) AS RN -- SEPARATING RECORDS USING ROW_NUMBER DIVIDED BY DEFINED NUMBER OF PRODS PER DAY. USING FLOOR AND MINUS A SMALL AMOUNT TO ROUND IT RIGHT
        FROM yourSourceTable
    )
    INSERT INTO yourDestTable
    SELECT
        C.*,
        DATEADD(DAY, LEAD(C.RN, @pLead), @pDate) AS [Date] --PUSHING THE NUMBER BASED ON ROWS ALREADY EXISTED WITH THE MAX_DATE
    INTO yourDestTable
    FROM cte AS C
)

您可能希望根据您的用例在 CTE 中使用 MOD。但这个想法应该可行。然后这样称呼它EXEC yourProcName <number of transactionsday>