存储过程动态查询

我在地球 2007-07-30 03:23:05
参数 传入SqlParameter paraphotoDate=new SqlParameter("PhotoDate",SqlDbType.datetime,8);

存储过程中拼接sql语句:
Declare @sqltext As varchar(1000)
Declare @sqlstr As varchar(1000)

@sqlstr='Datediff(day,uptime,'+@PhotoDate+')'

@sqltext='select * from table where'+@sqlstr+' order by id desc'

exec(@sqltext)
Go


问题出在:'Datediff(day,uptime,'+@PhotoDate+')'

这里改如何写呢?

因为@PhotoDate是时间类型才能在 DateDiff函数中使用
,但提示:
从字符串转换为 datetime 时发生语法错误。
也许在传送时都是以 字符串 形式传输的。
...全文
235 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-07-30
  • 打赏
  • 举报
回复
這個版也發了?樓主采用的是邹老大的參數的方法。

不過還是要提醒樓主,拼結動態SQL語句的時候,datetime,int一定要注意轉換類型,另外,就是單引號的控制也很重要。
haonanernet 2007-07-30
  • 打赏
  • 举报
回复
declare @PhotoDate datetime
set @PhotoDate = '2008-05-04'
declare @sqlstr varchar(8000)
set @sqlstr='Datediff(day,getdate(),cast('''+convert(varchar(10),@PhotoDate,120)+''' as datetime) )'
print @sqlstr
exec('select ' + @sqlstr)

------------

279
haonanernet 2007-07-30
  • 打赏
  • 举报
回复
按照上面的改一下你的存储过程应该就没有问题了
haonanernet 2007-07-30
  • 打赏
  • 举报
回复

@sqlstr='Datediff(day,uptime,'+@PhotoDate+')'
-------------------->


set @sqlstr='Datediff(day,uptime,cast('''+convert(varchar(10),@PhotoDate,120)+''' as datetime) )'
我在地球 2007-07-30
  • 打赏
  • 举报
回复
Try_my_best()的方法行
Try_my_best 2007-07-30
  • 打赏
  • 举报
回复
学其他大虾的方法实现的:
分可以不给我!

Declare @sqltext As varchar(1000)
Declare @sqlstr As varchar(1000)

@sqlstr='Datediff(day,uptime,@PhotoDate)'
@sqltext='select * from table where'+@sqlstr+' order by id desc'

exec sp_executesql @sqltext, N'@PhotoDate datetime', @PhotoDate

这是使用 存储过程参数传递方法。
haonanernet 2007-07-30
  • 打赏
  • 举报
回复
SqlParameter paraphotoDate=new SqlParameter("PhotoDate",SqlDbType.datetime,8);

--->



SqlParameter paraphotoDate=new SqlParameter("@PhotoDate",SqlDbType.datetime,8);


另外看看传进去的是什么?
语句本身没有错误
haonanernet 2007-07-30
  • 打赏
  • 举报
回复
SqlParameter paraphotoDate=new SqlParameter("@PhotoDate",SqlDbType.datetime,8);
haonanernet 2007-07-30
  • 打赏
  • 举报
回复
SqlDBType.DateTime然后直接使用DateTime传递进去即可

你的PhotoDate传进去是个什么?我怀疑传的值有错
eme915 2007-07-30
  • 打赏
  • 举报
回复
把@PhotoDate看成varchar类型,然后处理,不然的话
'Datediff(day,uptime,'+@PhotoDate+')'
的时候,会因为@PhotoDate是时间类型,而要把前面的'Datediff(day,uptime,'也要自动转成
datetime类型,除非你手工转换
set @sqlstr='Datediff(day,uptime,CAST('+@PhotoDate+' as varchar(14) ))'
eme915 2007-07-30
  • 打赏
  • 举报
回复
把@PhotoDate看成varchar类型,然后处理,不然的话
'Datediff(day,uptime,'+@PhotoDate+')'
的时候,会因为@PhotoDate是时间类型,而要把前面的'Datediff(day,uptime,'也要自动转成
datetime类型,除非你手工转换
CAST('+@PhotoDate+' as varchar(14)))
set @sqlstr='Datediff(day,uptime,CAST('+@PhotoDate+' as varchar(14) ))'
eme915 2007-07-30
  • 打赏
  • 举报
回复
Declare @PhotoDate as varchar(14)
看看
bigmingming 2007-07-30
  • 打赏
  • 举报
回复
PhotoDate:是否是按标准时间类型定义的字符串
路人乙e 2007-07-30
  • 打赏
  • 举报
回复
where 后边缺一空格
yzl1982 2007-07-30
  • 打赏
  • 举报
回复
应该是dateiff而不是datediff
我在地球 2007-07-30
  • 打赏
  • 举报
回复
晕晕,就是砸个石头也起个泡,竟然啥反映也没有
我在地球 2007-07-30
  • 打赏
  • 举报
回复
大虾帮忙呀

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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