【问题标题】:SQL Trying to use DATEADD in a stored procedureSQL 尝试在存储过程中使用 DATEADD
【发布时间】:2017-09-06 14:32:09
【问题描述】:

我在 Azure 上的示例数据库中创建了一个存储过程:

CREATE PROCEDURE SalesLT.InsertOrderHeader(@OrderDate AS DATETIME=NULL, @DueDate AS DATETIME=NULL, @CustomerID AS INT=NULL)
AS
DECLARE @SalesOrderID INT = NEXT VALUE FOR SalesLT.SalesOrderNumber
IF @OrderDate IS NULL
    BEGIN
        SET @OrderDate = GETDATE()
    END

INSERT INTO SalesLT.SalesOrderHeader(SalesOrderID,OrderDate,DueDate,CustomerID,ShipMethod)
VALUES (@SalesOrderID,@OrderDate,@DueDate,@CustomerID,'CARGO TRANSPORT 5')

PRINT @SalesOrderID

这很好,但是当我尝试调用它时,我想要一个从现在起一周后的约会:

EXEC SalesLT.InsertOrderHeader @DueDate= DATEADD(dd,7,getDate()) , @CustomerID=1

这不起作用。错误表明它在哪里说'dd'它期望(或选择,对于获取日期的右括号也是如此。它有什么问题?

【问题讨论】:

标签: sql azure datetime stored-procedures


【解决方案1】:

EXEC:

    [ [ @parameter = ] { value   
                       | @variable [ OUTPUT ]   
                       | [ DEFAULT ]   
                       }  
    ]  
  [ ,...n ]  

请注意,它接受 values 并且接受 variables。它不接受的是表达式。

您需要将DATEADD 逻辑移动到单独的行并将结果值存储在变量中。

DECLARE @dt datetime
SET @dt = DATEADD(day,7,getDate())
EXEC SalesLT.InsertOrderHeader @DueDate= @dt , @CustomerID=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2018-05-12
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多