存储过程动态查询

我在地球 2007-07-30 03:24:47
参数 传入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 时发生语法错误。
也许在传送时都是以 字符串 形式传输的。
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
我在地球 2007-07-30
  • 打赏
  • 举报
回复
大虾就是大虾,
用了
zjcxc(邹建)
的方法
才知道 有这样在 存储过程中参数在传递的
谢谢
zjcxc 元老 2007-07-30
  • 打赏
  • 举报
回复
Declare @sqltext As Nvarchar(1000) -- 注意改了类型
Declare @sqlstr As varchar(1000)

@sqlstr='Datediff(day,uptime,@PhotoDate) = 0' -- 楼主原来的语句少个判断值

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

exec sp_executesql @sqltext, N'@PhotoDate datetime', @PhotoDate
paoluo 2007-07-30
  • 打赏
  • 举报
回复
完整的

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

@sqlstr=' Datediff(day,uptime,'''+Convert(Varchar(10), @PhotoDate, 120)+''') = 0'

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

exec(@sqltext)
Go
paoluo 2007-07-30
  • 打赏
  • 举报
回复
liubinstud(百里透红) ( ) 信誉:100 2007-07-30 15:33:52 得分: 0


是'Datediff(day,uptime,'+@PhotoDate+')=0'
就是判断时间差为零的。
——————————————————————
请问Haiwer(海阔天空) :

'Datediff(day,uptime,"'+@PhotoDate+'")=0'
吗?
好像也不行


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

要做類型轉換的。
paoluo 2007-07-30
  • 打赏
  • 举报
回复
拼結動態語句的時候,datetime,int等類型都需要做下轉換。
我在地球 2007-07-30
  • 打赏
  • 举报
回复
是'Datediff(day,uptime,'+@PhotoDate+')=0'
就是判断时间差为零的。
——————————————————————
请问Haiwer(海阔天空) :

'Datediff(day,uptime,"'+@PhotoDate+'")=0'
吗?
好像也不行
paoluo 2007-07-30
  • 打赏
  • 举报
回复
@sqlstr='Datediff(day,uptime,'+@PhotoDate+')'

改為

@sqlstr='Datediff(day,uptime,'''+Convert(Varchar(10), @PhotoDate, 120)+''')'
zjcxc 元老 2007-07-30
  • 打赏
  • 举报
回复
为什么不换成参数传递呢?

Declare @sqltext As Nvarchar(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
Go
昵称被占用了 2007-07-30
  • 打赏
  • 举报
回复
晕 搂主的不是sql的写法

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

set @sqlstr='Datediff(day,uptime,'''+convert(varchar(varchar(10),@PhotoDate,120)+''')'

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

exec(@sqltext)
Go
昵称被占用了 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(@sqltext)
Go

34,593

社区成员

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

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