存储过程使用datetime类型参数时出错如何解决?

想到才能做到 2018-10-17 12:38:37
哪位帮忙看看,十份感谢!

代码如下:
if (object_id('proc_wldwqjyftj', 'P') is not null)
drop proc proc_wldwqjyftj
go
create proc proc_wldwqjyftj(@date1 datetime)
as
declare @sql varchar(8000)
begin
set @sql='select sale,name,ye from tes1 where rq>= CreateDate<=Convert(datetime,'+@date1+',120)'

print (@sql)

end

go


调用根据时执行代码如下:
exec proc_wldwqjyftj '2018-01-01'

错误提示:从字符串转换为 datetime 时发生语法错误。
...全文
290 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2018-10-17
  • 打赏
  • 举报
回复
你这个的逻辑还算简单, 没必要搞什么动态 sql 吧。
IF (OBJECT_ID('proc_wldwqjyftj', 'P') IS NOT NULL)
    DROP PROC proc_wldwqjyftj
GO
CREATE PROC proc_wldwqjyftj(@date1 DATETIME)
AS
BEGIN
	SELECT sale,
	       NAME,
	       ye
	FROM   tes1
	WHERE  rq >= CreateDate
	       AND rq <= CONVERT(CHAR(10), @date1, 120)
END
GO
二月十六 版主 2018-10-17
  • 打赏
  • 举报
回复
set @sql='select sale,name,ye from tes1 where rq>= CreateDate<=Convert(datetime,'+@date1+',120)'  --这里字符串和datetime类型的@date1相加会出错,需要对@date1进行类型转换
mingqing6364 2018-10-17
  • 打赏
  • 举报
回复
if (object_id('proc_wldwqjyftj', 'P') is not null)
drop proc proc_wldwqjyftj
go
create proc proc_wldwqjyftj(@date1 datetime)
as
declare @sql varchar(8000)
begin
set @sql='select sale,name,ye from tes1 where CreateDate between ' + Convert(char(10), @date1 ,120) + ' and rq'

print (@sql)

end

go
想到才能做到 2018-10-17
  • 打赏
  • 举报
回复
引用 3 楼 yenange 的回复:
你这个的逻辑还算简单, 没必要搞什么动态 sql 吧。
IF (OBJECT_ID('proc_wldwqjyftj', 'P') IS NOT NULL)
DROP PROC proc_wldwqjyftj
GO
CREATE PROC proc_wldwqjyftj(@date1 DATETIME)
AS
BEGIN
SELECT sale,
NAME,
ye
FROM tes1
WHERE rq >= CreateDate
AND rq <= CONVERT(CHAR(10), @date1, 120)
END
GO


哈哈,这只是一个简单的例子。我的存储过程比较复杂,我只是把出错的部份简单做一个让大家容易看。

34,576

社区成员

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

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