Sql server 无法识别SQL Server存储过程oDate作为参数
如何在执行命令中传递日期数据类型DateTime以运行存储过程 下面是代码片段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函数执行这个存储过程,甚至将
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作为日期,date
exec datefiltered 23, '2010-02-30'