У меня есть такая хранимая процедура:
alter procedure [dbo].[IBS_fetchreqVehicleinPodiumtestnew1]
@locid INTEGER = NULL
AS BEGIN
SET NOCOUNT ON
DECLARE @TodayMinus7Days DATETIME
Declare @krrt integer
Declare @DT integer
SET @TodayMinus7Days = getdate()-7
SELECT
t.TBarcode, t.PlateNo, t.DelEcode
if t.status=3
begin
@krrt=datediff(MINUTE, t.PayDate, GETDATE())
end
else
if t.status=4
begin
@krrt=datediff(MINUTE, t.PayDate, t.t.KeyRoomDate)
end
if t.status=5
begin
@dt=datediff(minute,t.paydate,t.Deldate)
end
FROM
dbo.Transaction_tbl t
WHERE
([status] IN (3,4) AND locid = @locid AND dtime >= @TodayMinus7Days)
OR
([status] = 5 AND DATEDIFF(n, CAST(DelDate AS DATETIME), GETDATE()) <= 3 AND locid = @locid AND dtime >= @TodayMinus7Days)
ORDER BY
paydate
END
при выполнении хранимой процедуры, если соответствующий статус Tbarcode равен 3, тогда я хочу показать разницу между paydate и текущим временем ti..if статус 4, тогда я хочу показать разницу между t.paydate и t.keyroomdate, если статус равен 5, тогда я хотите показать разницу между этой конкретной датой... но при выполнении этой хранимой процедуры возникает ошибка.
if
— оператор управления потоком. Вы не можете поставить один в середине оператораSELECT
. Кроме того, вы не можете совмещать извлечение данных и присвоение переменных в одномSELECT
. Поскольку вы больше нигде в хранимой процедуре не используете@krrt
и@dt
, и они являются локальными переменными, почему вы пытаетесь присвоить им значения? - person Damien_The_Unbeliever   schedule 11.04.2014