Håller på med en stored procedure men den verkar strunta i att jag i min SELECT har WHERE s.to_status = ''FASTSTÄLLD''.
Resultat ger även dom fält som har annat värde än FASTSTÄLLD.
Kort version:
....
FROM propdb_current_s s
LEFT OUTER JOIN frej_import f ON s.to_fbet = f.to_fbet
LEFT OUTER JOIN propdb_current_r r ON s.a_webc_url = r.a_webc_url
WHERE s.to_status = ''FASTSTÄLLD''
AND s.r_object_type = ''to_document''
AND NOT s.r_current_state = 0
... osv
Lång version för er som orkar läsa hela sp'n:
ALTER PROCEDURE usp_DVD_DitoDocCDTO
@to_grupp varchar(16),
@to_mtrl varchar(40),
@to_typ varchar(8),
@to_versioner varchar(40),
@to_kod varchar(32)
AS
CREATE TABLE #TempDocTable
(
a_webc_url nvarchar(450),
a_content_type nvarchar(32),
to_giltig datetime,
to_klass nvarchar(1),
object_name nvarchar(255),
r_content_size int,
r_folder_path nvarchar(765),
to_sakbyra nvarchar (40),
to_sakhandl nvarchar (64),
to_fben nvarchar(255),
to_fbet nvarchar(12),
to_typ nvarchar(8),
to_mtrl nvarchar(40),
to_grupp nvarchar(16),
to_lopnr nvarchar(6),
to_order int,
to_status nvarchar(12),
to_sid nvarchar(4),
to_utg nvarchar(2),
to_avisering datetime,
to_upphavd datetime,
to_faststalld datetime,
r_current_state int,
to_arendemening nvarchar(500),
to_tillh nvarchar(500),
to_versioner nvarchar(500),
to_kod nvarchar(32),
to_upphavd_orsak nvarchar(128)
)
DECLARE @SQL varchar(8000)
SET @SQL = 'SELECT DISTINCT
rtrim(s.a_webc_url),
rtrim(s.a_content_type),
s.to_giltig,
s.to_klass,
rtrim(s.object_name),
s.r_content_size,
rtrim(s.r_folder_path),
s.to_sakbyra,
s.to_sakhandl,
f.to_fben,
s.to_fbet,
s.to_typ,
s.to_mtrl,
s.to_grupp,
s.to_lopnr,
s.to_order,
rtrim(s.to_status),
s.to_sid,
s.to_utg,
s.to_avisering,
s.to_upphavd,
s.to_faststalld,
s.r_current_state,
'''' AS to_arendemening,
'''' AS to_tillh,
'''' AS to_versioner,
s.to_kod,
s.to_upphavd_orsak
FROM propdb_current_s s
LEFT OUTER JOIN frej_import f ON s.to_fbet = f.to_fbet
LEFT OUTER JOIN propdb_current_r r ON s.a_webc_url = r.a_webc_url
WHERE s.to_status = ''FASTSTÄLLD''
AND s.r_object_type = ''to_document''
AND NOT s.r_current_state = 0
AND NOT s.object_name = ''DUMMY'' AND (
rtrim(s.to_grupp) LIKE ''' + @to_grupp + ''' AND
rtrim(s.to_mtrl) LIKE ''' + @to_mtrl + ''' AND
rtrim(s.to_typ) LIKE ''' + @to_typ + ''''
IF NOT @to_versioner = '%'
BEGIN
SET @SQL = @SQL + ' AND r.to_versioner LIKE ''' + @to_versioner + ''')'
END
ELSE
BEGIN
SET @SQL = @SQL + ')'
END
IF NOT @to_kod = '' AND NOT @to_kod IS NULL
BEGIN
SET @SQL = @SQL + ' OR s.to_kod = ''' + @to_kod + ''''
END
PRINT @SQL
INSERT INTO #TempDocTable
EXEC (@SQL)
DECLARE object_s_cur CURSOR FOR
SELECT a_webc_url FROM #TempDocTable
OPEN object_s_cur
DECLARE
@a_webc_url_s varchar(544),
@tempArendemening varchar(500),
@tempTillh varchar(500),
@tempVersioner varchar(500)
FETCH NEXT FROM object_s_cur INTO @a_webc_url_s
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE object_r_cur CURSOR FOR
SELECT to_arendemening, to_tillh, to_versioner
FROM propdb_current_r
WHERE a_webc_url = @a_webc_url_s
OPEN object_r_cur
DECLARE
@to_arendemening_r varchar(80),
@to_tillh_r varchar(24),
@to_versioner_r varchar(40)
FETCH NEXT FROM object_r_cur INTO @to_arendemening_r, @to_tillh_r, @to_versioner_r
SET @tempArendemening = ''
SET @tempTillh = ''
SET @tempVersioner = ''
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT @to_arendemening_r IS NULL AND NOT RTRIM(@to_arendemening_r) = ''
BEGIN
SET @tempArendemening = @tempArendemening + LTRIM( RTRIM( @to_arendemening_r ) ) + ', '
END
IF NOT @to_tillh_r IS NULL AND NOT RTRIM(@to_tillh_r) = ''
BEGIN
SET @tempTillh = @tempTillh + LTRIM( RTRIM( @to_tillh_r ) ) + ', '
END
IF NOT @to_versioner_r IS NULL AND NOT RTRIM(@to_versioner_r) = ''
BEGIN
SET @tempVersioner = @tempVersioner + LTRIM( RTRIM( @to_versioner_r ) ) + ', '
END
FETCH NEXT FROM object_r_cur INTO @to_arendemening_r, @to_tillh_r, @to_versioner_r
END
IF @tempArendemening <> ''
SET @tempArendemening = Substring( @tempArendemening, 1, LEN( @tempArendemening ) - 1 )
IF @tempTillh <> ''
SET @tempTillh = Substring( @tempTillh, 1, LEN( @tempTillh ) - 1 )
IF @tempVersioner <> ''
SET @tempVersioner = Substring( @tempVersioner, 1, LEN( @tempVersioner ) - 1 )
UPDATE #TempDocTable SET
to_arendemening = @tempArendemening,
to_tillh = @tempTillh,
to_versioner = @tempVersioner
WHERE a_webc_url = RTRIM( @a_webc_url_s )
CLOSE object_r_cur
DEALLOCATE object_r_cur
FETCH NEXT FROM object_s_cur INTO @a_webc_url_s
END
CLOSE object_s_cur
DEALLOCATE object_s_cur
SELECT DISTINCT * FROM #TempDocTable
DROP TABLE #TempDocTable
Min gissning är att probblemet är något sånt härnt:
BEGIN
SET @SQL = @SQL + ' OR s.to_kod = ''' + @to_kod + ''''
END
Med det tillägget räcker det ju att s.to_kod har ett visst värde.
Om du skriver ut den färdiga sql-frågan som porceduren genererar (typ print @SQL) så ser du säkert om du har något OR som inte parentesmässigt hänger ihop med rätt villkor.
139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe