2016-07-29 20 views
0

ich diesen Code bin mit:SQL 2000 incorect SYNTAX NAHE MIT

WITH cte AS(SELECT panelname FROM inventorypanelcaptions UNION ALL SELECT CAST(0 AS VARCHAR(50)) FROM INVENTORYPANELCAPTIONS) SELECT CASE WHEN cast(min(right(panelname, 2) + 1) as varchar(50)) < 10 THEN 'o0' ELSE 'o' END + cast(min(right(panelname, 2) + 1) as varchar(50)) FROM cte WHERE NOT EXISTS (SELECT panelname FROM inventorypanelcaptions WHERE right(inventorypanelcaptions.panelname, 2)= right(cte.panelname, 2)+1) ", con); 

Ich erhalte falsche Syntax in der Nähe 'Mit'

+0

Aktualisieren Sie auf eine unterstützte Version von SQL Server, und der Code sollte funktionieren. –

+0

Gibt es keine Möglichkeit, dies zu tun? – DiH

+5

CTEs wurden mit SQL Server 2005 hinzugefügt. Sie müssen mindestens so weit aktualisieren, dass diese Abfrage ausgeführt werden kann. Außerdem sind sowohl Sql Server 2000 als auch Sql Server 2005 jetzt ** End of Life **. Sie erhalten keine _ ** irgendwelche ** _ Patches oder Updates ... nicht einmal kritische Sicherheitsupdates. Es ist unverantwortlich und gefährlich, sie weiterhin zu benutzen; Das Upgrade auf eine unterstützte Datenbank sollte hier oberste Priorität haben. –

Antwort

1

Um es in SQL 2000 funktioniert, können Sie es bewegen zu eine Unterabfrage

SELECT CASE WHEN cast(min(right(panelname, 2) + 1) as varchar(50)) < 10 THEN 'o0' ELSE 'o' END + cast(min(right(panelname, 2) + 1) as varchar(50)) 
    FROM (
     SELECT panelname FROM inventorypanelcaptions UNION ALL SELECT CAST(0 AS VARCHAR(50)) 
     FROM INVENTORYPANELCAPTIONS 
    ) cte 
    WHERE NOT EXISTS ( SELECT panelname 
         FROM inventorypanelcaptions 
         WHERE right(inventorypanelcaptions.panelname, 2)= right(cte.panelname, 2)+1 
        ) ", con); 
+1

Genauer gesagt ist dies eine abgeleitete Tabelle. –

+0

Danke, ich wusste nicht, dass es einen Unterschied gab. – grambo25

+0

Danke Mann es funktioniert Gut! – DiH