Я работаю над sql-script
, который считывает неправильные наборы данных. например, набор данных неверен, когда @differenz
больше 0 (это означает, что конец начинается с начала)
, поэтому я спрашиваю в выражении case, если differenz
больше нуляпоставить единицу, если она верна, или ноль, если нет, но я не могу вызвать переменную @differenz Я получил эту ошибку Должен объявить скалярную переменную "@differenz"
.
Как я могу вызвать эту переменную
USE [ws_Benjamin]
GO
/****** Object: View [fu].[FUanalyse] Script Date: 30.09.2019 13:43:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @differenz bigint
DECLARE @fidFirst bigint
DECLARE @beginFirst bigint
DECLARE @endFirst bigint
DECLARE @fidSecond bigint
DECLARE @beginSecond bigint
DECLARE @endSecond bigint
DECLARE @first as TABLE
(
fidFirst bigint,
beginFirst bigint,
endFirst bigint
)
DECLARE @second as TABLE
(
fidSecond bigint,
beginSecond bigint,
endSecond bigint
)
DECLARE myCursor CURSOR FOR
SELECT fid, DATUMZEITBEGIN, DATUMZEITEND FROM fu.FUrearranged
order by fid
OPEN myCursor
FETCH NEXT FROM myCursor INTO @fidFirst, @beginFirst,@endFirst
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM myCursor INTO @fidSecond, @beginSecond, @endSecond
if (@endFirst-@beginSecond)>0
begin
set @differenz = (@endFirst-@beginSecond)
--print 'there it is'
end
else
begin
set @differenz = -100
end
END
CLOSE myCursor -- must to close
DEALLOCATE myCursor -- must to deallocate
go
ALTER VIEW [fu].[FUanalyse]
as
--with fus(personFID ,anzahlFU) as ( select fu.FUrearranged.fid, ranked from fu.FUrearranged)
select id, fid, dbfid, ranked, typ, datum, F1,F2,F3,G1,G2,G3,datumzeitbegin,datumzeitend,
case
when substring(typ, 4, 8) = 'ärztlich' and austritt between convert(datetime, STUFF(STUFF(STUFF(datumzeitbegin,13,0,':'),11,0,':'),9,0,' '),121) and
convert(datetime, STUFF(STUFF(STUFF(datumzeitend,13,0,':'),11,0,':'),9,0,' '),121) and
eintritt < convert(datetime, STUFF(STUFF(STUFF(datumzeitbegin,13,0,':'),11,0,':'),9,0,' '),121) then '1'
/*when substring(typ, 4, 8) = 'ärztlich' and eintritt > convert(datetime, STUFF(STUFF(STUFF(datumzeitbegin,13,0,':'),11,0,':'),9,0,' '),121) and
austritt < convert(datetime, STUFF(STUFF(STUFF(datumzeitend,13,0,':'),11,0,':'),9,0,' '),121) then 'Ungültig (Aufenthalt kürzer als FU)'
when datumzeitend is null then 'Ungültig (Enddatum nicht vorhanden)'*/
else '0'
end as FUlaufend,
case
when substring(typ, 4, 8) = 'ärztlich' and eintritt > convert(datetime, STUFF(STUFF(STUFF(datumzeitbegin,13,0,':'),11,0,':'),9,0,' '),121) and
austritt < convert(datetime, STUFF(STUFF(STUFF(datumzeitend,13,0,':'),11,0,':'),9,0,' '),121) then '1'
else '0'
end as FUzuKurz,
case
when G1 = 0 and G2 = 0 and G3 = 0 then '1'
else '0'
end as G_Ungültig,
case
when F1 = 0 and F2 = 0 and F3 = 0 then '1'
else '0'
end as F_Ungültig,
case
when DATUMZEITEND = null then '1'
else '0'
end as FUkeinEnddatum,
case
when @differenz > 0 then '1'
else '0'
end as F_Überscheindung
from fu.FUrearranged
GO