• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

存储过程datediff 函数这么用为什么不对?

echolife 2008-03-14 12:16:13
select * from table1 where datediff(@OrderDateType,DateAndTime,getdate())

报datediff指定错误参数?
为什么不能用@参数代替?语法有问题吗?
...全文
233 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gahade 2008-03-14
不能为参数指定变量,组成动态SQL执行吧
回复
zjcxc 元老 2008-03-14
不支持而已, 所以当然不对
回复
echolife 2008-03-14
@OrderDateType 是由asp 传递过来的参数。这里还能重新定义吗?
用参数的目的是因为datediff 类型是由asp 传过来的参数决定。
回复
fcuandy 2008-03-14
select * from table1 where datediff(@OrderDateType,DateAndTime,getdate())

你的 @orderDateType 是字串变量
而datediff的参数是标识符. 所以错误.

比如正确的应该是
datediff(dd,dateAndTime,getdate())
而你的写法会产生
datediff('dd',dateAndTime,getdate())
这样的,所以是错的.

因为 datediff的第一个参数是内置标识代码,不支持变量或计算.
用if 分支或动态语句.
回复
-狙击手- 2008-03-14
declare @OrderDateType varchar(10)
select @OrderDateType = 'mm'
if @OrderDateType = 'mm'
select *
from table1
where datediff(mm,DateAndTime,getdate()) =1
else if ...
....
回复
yms_wangxm 2008-03-14
学习
回复
-狙击手- 2008-03-14
declare @OrderDateType varchar(10)
select @OrderDateType = 'mm'
exec('select *
from table1
where datediff('+@OrderDateType+',DateAndTime,getdate()) =1')
回复
-狙击手- 2008-03-14
用动态SQL 或用分支判断语句
回复
-狙击手- 2008-03-14
set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())='+ltrim(@num)
回复
青锋-SS 2008-03-14
语句有问题,函数参数有误.
回复
echolife 2008-03-14
用 set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())=@num'

set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())='+ CONVERT(nvarchar,@num) +'

@num 由asp 传递过来,

这两种写法都报错,说@num要定义,我在存储过程已经定义了
@num int
怎么回事?
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-14 12:16
社区公告
暂无公告