go
create proc create_UserSysLog
@UsersysLog_Uid nvarchar(128)=null
,@UsersysLog_Action nvarchar(200)=null
,@UsersysLog_Operate nvarchar(500)=null
,@begdt nvarchar(50) --开始时间
,@enddt nvarchar(50) --结束时间
,@UsersysLog_DateTime nvarchar(50)=null --时间字段
as
declare @error int --Rec Message
set @error=0;begin transaction
select * from dbo.T_UsersysLog
where
case when @begdt is not null then --选择开始和结束字段(此行报错)
UsersysLog_DateTime between @enddt and @begdt and (此行报错)
else UsersysLog_DateTime<@enddt end and --只选择结束字段
UsersysLog_Uid like case when @UsersysLog_Uid is null then UsersysLog_Uid
else @UsersysLog_Uid end and
UsersysLog_Action like case when @UsersysLog_Action is null then UsersysLog_Uid
else @UsersysLog_Uid end and
UsersysLog_Operate like case when @UsersysLog_Operate is null then UsersysLog_Operate
else @UsersysLog_Operate end set @error=@error+@@ERROR
if @error>0
begin
rollback transaction
end
else
begin
commit transaction
end1. 156,级别 15,状态 1,过程 create_UserSysLog,第 17 行
关键字 'between' 附近有语法错误。
2.关于间隔时间的查询:UsersysLog_DateTime between @enddt and @begdt
存储SQLselect
把最后这个and去掉
把最后这个and去掉
Ans:老师我把and 去掉了,还是报同样的错
@UsersysLog_Uid nvarchar(128)=null
,@UsersysLog_Action nvarchar(200)=null
,@UsersysLog_Operate nvarchar(500)=null
,@begdt nvarchar(50) --开始时间
,@enddt nvarchar(50) --结束时间
,@UsersysLog_DateTime nvarchar(50)=null --时间字段
as select * from dbo.T_UsersysLog
where 1=1
case when @begdt is not null then
AND UsersysLog_DateTime between @enddt and @begdt
else UsersysLog_DateTime<@enddt end
AND UsersysLog_Uid like case when @UsersysLog_Uid is null then UsersysLog_Uid
else @UsersysLog_Uid end
AND UsersysLog_Action like
case when @UsersysLog_Action is null then
UsersysLog_Uid
else
@UsersysLog_Uid
end
AND UsersysLog_Operate like
case when @UsersysLog_Operate is null then
UsersysLog_Operate
else
@UsersysLog_Operate
end
你试试这样写行不行。不行的话,可以在存储过程里面拼语句:
declare @SQL varchar(8000);然后根据条件来拼接语句就可以了。
select * from tables
where ShipQuantity=(case when ShipQuantity>1 then 2 else 3 end)
一般是where中尽量用字段的原始类型(不会破坏索引),select字段中才格式化成需要的样式