Sql server 无法识别SQL Server存储过程oDate作为参数

Sql server 无法识别SQL Server存储过程oDate作为参数,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,如何在执行命令中传递日期数据类型DateTime以运行存储过程 下面是代码片段 ALTER PROCEDURE [dbo].[datefiltered] @months_margin int, @oDate datetime AS BEGIN SELECT * FROM dbo.table20 WHERE date = oDate -- more code... END 我试图使用GETDATE函数执行这个存储过程,甚至将

如何在执行命令中传递日期数据类型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()


由于要应用日期筛选器,所以不需要传递datetime值。您可以转换为日期数据类型以实现相等

从dbo.table20中选择* 其中日期=CAST@oDate截止日期 此外,如果只是将GETDATE作为默认值传递,则可以将GETDATE作为默认值,如下所示:

Alter procedure[dbo].[datefiltered] @月(国际), @oDate datetime=null 像 开始 如果@oDate为空 开始 将@oDate=CASTGETDATE设置为日期 终止 使用默认值调用过程时,不需要为其传递参数值

exec datefiltered 23-自动应用getdate筛选器 执行此存储过程:

exec datefiltered 23, '2010-02-30'

首先,为什么您的过程中有参数,您根本不在查询中使用它们;您只需检查列[date]是否与列oDate具有相同的值。至于原因,传递给过程的参数必须是文本或变量。您需要首先将值GETDATE分配给一个变量,然后将其传递给过程;23和下一个参数的值之间应该有一个逗号。我在代码中使用了param,但为了简化它而将其隐藏起来。还添加了分隔符Rhint:where[date]=@oDate@oDate是参数,oDate是列名。您的代码不太可能正常工作,因为GETDATE包含时间。您的意思可能是date>=CASTGETDATE作为日期,dateexec datefiltered 23, '2010-02-30'