SQL Server - 将默认DateTime值分配给存储过程中的参数

Sun*_*oot 7 sql t-sql sql-server stored-procedures

也许我在这里是个白痴,但我正在尝试将默认的DateTime值分配给MS SQL Server 2005中的存储过程,但无法让它工作,例如:

CREATE PROCEDURE MyProcedure
(
    @MyInteger    INT = 123,
    @MyDateTime   DATETIME = CONVERT(DATETIME, '1753-01-01 00:00:00', 20)
)
AS
BEGIN ... (snip)
Run Code Online (Sandbox Code Playgroud)

因此,如果@MyDateTime未指定输入参数,则默认情况下应使用"1753-01-01 00:00:00",但是我收到错误...

Incorrect syntax near the keyword 'CONVERT'.
Run Code Online (Sandbox Code Playgroud)

我可以让它为Integers工作就好了.我究竟做错了什么?


编辑:从下面的答案中,我最终在Sproc本身内部进行了以下操作:

CREATE PROCEDURE MyProcedure
(
    @MyInteger    INT = 123,
    @MyDateTime   DATETIME = NULL
)
AS
BEGIN
    SET NOCOUNT ON

    SET @MyDateTime = COALESCE(@MyDateTime, CONVERT(DATETIME, '1753-01-01 00:00:00', 20))

    ...snip...
END
Run Code Online (Sandbox Code Playgroud)

Jon*_*onH 7

@MyDateTime DATETIME ='1753-01-01 00:00:00'

或者在sproc内你可以这样做:

SELECT @MyDateTime = (SELECT CONVERT(DATETIME, '1753-01-01 00:00:00', 20))

该错误是由于调用CONVERT,在默认参数时您无法执行此操作.

  • @Sunday Ironfoot,只需在"SET NOCOUNT ON"之后或存储过程开始时调用转换.你可以在那里打电话给转换. (2认同)