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

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

报datediff指定错误参数?
为什么不能用@参数代替?语法有问题吗?
...全文
357 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
怎么回事?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧