参数 传入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 时发生语法错误。
也许在传送时都是以 字符串 形式传输的。

解决方案 »

  1.   

    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
      

  2.   

    晕 搂主的不是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
      

  3.   

    为什么不换成参数传递呢?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
      

  4.   

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

  5.   

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

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

  6.   

    拼結動態語句的時候,datetime,int等類型都需要做下轉換。
      

  7.   

    liubinstud(百里透红) ( ) 信誉:100  2007-07-30 15:33:52  得分: 0  
     
     
       是'Datediff(day,uptime,'+@PhotoDate+')=0'
    就是判断时间差为零的。
    ——————————————————————
    请问Haiwer(海阔天空) :

    'Datediff(day,uptime,"'+@PhotoDate+'")=0'
    吗?
    好像也不行
      
     
    ----------------要做類型轉換的。
      

  8.   

    完整的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
      

  9.   

    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
      

  10.   

    大虾就是大虾,
    用了
    zjcxc(邹建) 
    的方法
    才知道 有这样在 存储过程中参数在传递的
    谢谢