CREATE procedure JJJ(@QSRQ smalldatetime,@QC varchar(50))
AS
begin
             declare @sql Nvarchar(200)  
             set @sql='
select *
from '+@QC+' where RQ='+@QSRQ
             EXEC  (@sql)
end
GO
提示:
从字符串转换为 smalldatetime 数据类型时发生语法错误。
但如果将参数设置为字符型,又查不出数据

解决方案 »

  1.   

    set @sql='select * from '+@QC+' where RQ='+convert(varchar,@QSRQ)
      

  2.   

    CREATE procedure JJJ(@QSRQ smalldatetime,@QC varchar(50))
    AS
    begin
                 declare @sql Nvarchar(200)  
                 set @sql='
    select *
    from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
                 EXEC  (@sql)
    end
    GO
      

  3.   

    set @sql='select * from '+@QC+' where convert(varchar,RQ)='+convert(varchar,@QSRQ)
      

  4.   

    多谢大家帮助
    xyxfly的方法可以
    但不知道为什么要这么多引号呢
      

  5.   

    类似于转义字符CREATE procedure JJJ(@QSRQ smalldatetime,@QC varchar(50))
    AS
    begin
                 declare @sql Nvarchar(200)  
                 set @sql='
    select *
    from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
    print @sql--这里加个print看看就明白了^_^
                 EXEC  (@sql)
    end
    GO
      

  6.   

    转以字符:
    单引号在SQL SERVER中是字符串的起始/终止符号
    当语法分析器看到第一个单引号的时候就认为,他后面的就是一个字符串,直到遇到下一个单引号,表示这个字符串结束.
    你后面的变量@QSRQ是一个字符串,但是拼装到动态SQL语句的时候,他自己没有被单引号括起来,所以必须增加单引号
    在SQL SERVER中,用2个单引号表示一个单引号,就是说,你想把单引号作为一个普通符号使用,而不是SQL SERVER默认的"字符串的起始/终止符号",那么需要告诉SQL SERVER这是一个普通符号,不是特殊符号,语法格式就是2个单引号,这个时候,第一个单引号的作用不再是"字符串的起始/终止符号",而是转义字符,意思就是他后面的符号(一般都是特殊符号)现在只是一个普通的字符,相信转义字符你应该知道吧
    --------------------
    挖哈哈 ,写完了,好累
    --------------
    楼主,要给我1000分啊,谢谢
      

  7.   

    'select * from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
    print @sql--这里加个print看看就明白了^_^怎么执行,在查询分析器里面没运行结果呢,怎么看@SQL(教教方法就没有下面的问题了)
    上面那句话可以这样写不
    'select * from '+@QC+' where RQ='+''+cast(@QSRQ as varchar)+''+''还有就是最后的四个''''怎么解释,难道是用4个单引号表示2个单引号?
    还是后面的三个单引号都是普通的字符了呢
      

  8.   

    楼主的存储过程出错最明显的原因是:没有对日期值加引号,所以在编译时会出错,另外就是日期型要转换为字符型,这样才不会在调用时出错
    所以xyxfly的方法是正确的
    楼主所不能理解的是为什么会出现'''和'''',这是因为'''表示在字符中增加一个'号,''''表示在字符串中增加两个'号
      

  9.   

    "怎么执行,在查询分析器里面没运行结果呢,怎么看@SQL(教教方法就没有下面的问题了)"可以看到的哦,查询分析器正常情况下你看的是查询结果的窗口,你从查询分析器底端开始找,有个写着消息的按钮,你点一下哪个消息就可以看到了  :)
      

  10.   

    难道是用4个单引号表示2个单引号?不是,+''''  比如你要加个A,这样写+'A'
    但是要加引号呢,   +'''' 即 +'   ''    '中间两个引号相当于字符A,只不过引号要用转义字符,两个表示一个如果你写成+''+''就成了什么也没有了