1 alter procedure GetBy_ItemName_BetweenTime 2 @itemName nvarchar(50), 3 @beginTime datetime, 4 @endTime datetime 5 as 6 7 declare @tableName nvarchar(50) 8 set @tableName = (select TableName from TQueryItem where ItemName=@itemName) 9 10 exec ('select * from '+@tableName+' where YYMMDD between '+@beginTime+' and '+@endTime)
上面的SQL执行不了,应该是between那里的时间参数拼接有问题吧?可是改了很多次还是不行,求助啊!该怎样修改?
最后答案:
ALTER procedure [dbo].[GetBy_ItemName_BetweenTime]
@itemName nvarchar(50),
@beginTime datetime,
@endTime datetime
as
declare @tableName nvarchar(50)
set @tableName = (select TableName from TQueryItem where ItemName=@itemName)
exec ('select * from '+@tableName+' where YYMMDD between '''+@beginTime+''' and '''+@endTime+'''')
时间上的单引号问题。。。我蠢了
问题解决了。。。是引号问题,我太蠢了。。
1、@TableName先确定一下,结果是什么,不要用动态的。
2、同理, BeginTime 和 EndTime。
3、直接执行一下拼出来的语句,看看显示什么错误。
@TableName这个没问题,因为去掉后面的时间参数可以查询得出数据,加上between后就查询出错了,出错的是时间。
@xiao黎: 对啊,时间。
传入的参数beginTime,endTime非合法日期格式值,把sql报错也发上来
建议:
1、检查下语法是否能通过。
2、在1的前提下,检查传入字符的类型和格式是否符合要求。