2016-07-29 9 views
0

私はこのコードを使用しています:SQL 2000 INCORECT SYNTAX NEAR WITH

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); 

は、私はそれがSQL 2000で動作させるため

+0

サポートされているバージョンのSQL Serverにアップグレードするとコードが機能するはずです。 –

+0

これを行う方法はありませんか? – DiH

+5

SQL Server 2005でCTEが追加されました。少なくともこのクエリを実行するには、それ以上アップグレードする必要があります。さらに、Sql Server 2000とSql Server 2005の両方が現在**の末尾に**あります。彼らはもはや重要なセキュリティアップデートさえも、** **パッチやアップデートを得ることはできません。それらを使用し続けることは無責任で危険です。サポートされているデータベースにアップグレードすることが最優先事項です。 –

答えて

1

'で' 付近に正しくない構文を取得しています、あなたはそれを移動することができますサブクエリ

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

もっと正確には、これは派生テーブルです。 –

+0

ありがとう、私は区別があるか分からなかった。 – grambo25

+0

ありがとうございました。 – DiH

関連する問題