日期:2014-05-17  浏览次数:20732 次

sql拼接语句的格式转换
本帖最后由 drsheldoncooper 于 2013-02-18 21:59:04 编辑
刚学写存储过程,大侠们看看哪里发生格式转换?主要问题是 @日期 是datetime格式吗?但是拼接语句是字符串格式不是应该从datetime转换成字符串吗,错误提示为什么相反的呢?如果不把 @日期 改成字符串格式,有其他可行的方法吗?谢过。


create table 调拨概况
(
 调拨单号 char(15) PRIMARY KEY,
 日期 datetime not null
)
go

declare @旧单号 char(15),@sqls nvarchar(1000),@类型 char(10),@日期 datetime,@关联表 char(20)
set @类型='调拨单号'
set @日期='2010-9-29'
set @关联表='调拨概况'
set @sqls='select @a=max(' + @类型 + ') from ' + @关联表 + ' where 日期=''' + @日期 + ''''

exec sp_executesql @sqls,N'@a char(15) output',@旧单号 output
select @旧单号
GO

------解决方案--------------------
set @sqls='select @a=max(' + @类型 + ') from ' + @关联表 + ' where 日期=''' + 
convert(varchar,@日期,121) + ''''
------解决方案--------------------
@日期 是日期型,看你定义就知道了,但是拼接动态sql的时候由于整个句子都是字符型。