SQL 服务器存储过程 oDate 作为参数无法识别

SQL Server stored procedure oDate as a parameter not recognized

如何将执行命令中的日期(数据类型DateTime)传递给运行存储过程?

这是代码片段。

ALTER PROCEDURE [dbo].[datefiltered]
    @months_margin int, 
    @oDate         datetime
AS 
BEGIN
    SELECT * 
    FROM dbo.table20
    WHERE date = oDate

    -- more code...
END

我正在尝试使用 GETDATE() 函数执行此存储过程,甚至将日期和时间作为字符串传递,但它不起作用。

exec datefiltered 23 getDate()

因为要应用日期过滤器,所以不需要传递日期时间值。您可以转换为 DATE 数据类型以获得相等性。

 select * from dbo.table20
     where date = CAST(@oDate AS DATE)

此外,如果您只是将 GETDATE() 作为默认值传递,您可以将 getdate 保留为默认值,如下所示:

Alter procedure [dbo].[datefiltered]
      @months_margin   int, 
      @oDate           datetime = null 
AS 
Begin 

IF @oDate IS NULL
BEGIN
SET @oDate = CAST(GETDATE() AS DATE)
END 

使用默认值调用过程时,不需要为其传递参数值。

exec datefiltered 23 -- getdate() filter is applied automatically 
ALTER PROCEDURE [dbo].[datefiltered]
    @months_margin int, 
    @oDate         datetime
AS 
BEGIN
    SELECT * 
    FROM dbo.table20
    WHERE date = CAST(@oDate AS DATE)

    -- more code...
END

正在执行这个存储过程:

exec datefiltered 23, '2010-02-30'