动态SQL中日期比较

SIWEILIULANG 2006-08-04 02:45:10
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 数据类型时发生语法错误。
但如果将参数设置为字符型,又查不出数据
...全文
799 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fightback 2006-08-05
  • 打赏
  • 举报
回复
'select * from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
print @sql--这里加个print看看就明白了^_^

怎么执行,在查询分析器里面没运行结果呢,怎么看@SQL(教教方法就没有下面的问题了)


上面那句话可以这样写不
'select * from '+@QC+' where RQ='+''+cast(@QSRQ as varchar)+''+''

还有就是最后的四个''''怎么解释,难道是用4个单引号表示2个单引号?
还是后面的三个单引号都是普通的字符了呢

SIWEILIULANG 2006-08-05
  • 打赏
  • 举报
回复
多谢大家的帮助
分有限
大家见谅
xyxfly 2006-08-05
  • 打赏
  • 举报
回复
难道是用4个单引号表示2个单引号?

不是,+'''' 比如你要加个A,这样写+'A'
但是要加引号呢, +'''' 即 +' '' '中间两个引号相当于字符A,只不过引号要用转义字符,两个表示一个

如果你写成+''+''就成了什么也没有了
xyxfly 2006-08-05
  • 打赏
  • 举报
回复
"怎么执行,在查询分析器里面没运行结果呢,怎么看@SQL(教教方法就没有下面的问题了)"

可以看到的哦,查询分析器正常情况下你看的是查询结果的窗口,你从查询分析器底端开始找,有个写着消息的按钮,你点一下哪个消息就可以看到了 :)
云中客 2006-08-05
  • 打赏
  • 举报
回复
楼主的存储过程出错最明显的原因是:没有对日期值加引号,所以在编译时会出错,另外就是日期型要转换为字符型,这样才不会在调用时出错
所以xyxfly的方法是正确的
楼主所不能理解的是为什么会出现'''和'''',这是因为'''表示在字符中增加一个'号,''''表示在字符串中增加两个'号
lalakid 2006-08-04
  • 打赏
  • 举报
回复
转以字符:
单引号在SQL SERVER中是字符串的起始/终止符号
当语法分析器看到第一个单引号的时候就认为,他后面的就是一个字符串,直到遇到下一个单引号,表示这个字符串结束.
你后面的变量@QSRQ是一个字符串,但是拼装到动态SQL语句的时候,他自己没有被单引号括起来,所以必须增加单引号
在SQL SERVER中,用2个单引号表示一个单引号,就是说,你想把单引号作为一个普通符号使用,而不是SQL SERVER默认的"字符串的起始/终止符号",那么需要告诉SQL SERVER这是一个普通符号,不是特殊符号,语法格式就是2个单引号,这个时候,第一个单引号的作用不再是"字符串的起始/终止符号",而是转义字符,意思就是他后面的符号(一般都是特殊符号)现在只是一个普通的字符,相信转义字符你应该知道吧
--------------------
挖哈哈 ,写完了,好累
--------------
楼主,要给我1000分啊,谢谢
xyxfly 2006-08-04
  • 打赏
  • 举报
回复
类似于转义字符

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
SIWEILIULANG 2006-08-04
  • 打赏
  • 举报
回复
多谢大家帮助
xyxfly的方法可以
但不知道为什么要这么多引号呢
playwarcraft 2006-08-04
  • 打赏
  • 举报
回复
set @sql='select * from '+@QC+' where convert(varchar,RQ)='+convert(varchar,@QSRQ)
xyxfly 2006-08-04
  • 打赏
  • 举报
回复
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
playwarcraft 2006-08-04
  • 打赏
  • 举报
回复
set @sql='select * from '+@QC+' where RQ='+convert(varchar,@QSRQ)
freeliu 2006-08-04
  • 打赏
  • 举报
回复
用convert试试

34,590

社区成员

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

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