2011-12-23 6 views
0

の列名に対する「のように」を使用:https://stackoverflow.com/questions/8616458/sql-query-like-clarification私は、次の質問を見てみることを始めwhere句

は、残念ながら、彼がしようとしてしかし、私はこれを解釈することを決定した元の質問がやや不明確だったように見えましたスキーマ内の特定の列が同じ条件に一致したときにのみクエリを実行します。これは尋ねられたことではない可能性が非常に高いですが、これを行うために自分自身に挑戦したい(原文が不明で、削除される可能性があり、これに関連するものは何もないので新しい質問として投稿されました)。

select 
     [OrderID] 
     ,[ProductID] 
     ,[UnitPrice] 
     ,[Quantity] 
     ,[Discount] 
from [Northwind].[dbo].[Order Details] 
where 
    (
     select top 1 
       COLUMN_NAME 
     from INFORMATION_SCHEMA.columns 
     where COLUMN_NAME like '%ProductID' 
    ) like '%ProductID' 

私は、これは私はあなたに私の思考プロセスが向かっていたアイデアを与えるためにここにそれを入れても、そのベースを期待していたが、どのよう構文的にばかげ承知している:私は、次のされたようになったもの

私はあなたが指定した条件に一致するデータベースの列があるときにのみクエリを実行するより良い方法についてフィードバックを得ることができますか?私はどこにも目的を見出すことができません - 私はちょうど興味があり、私はこれから学ぶことができると思います。

+0

この質問を「削除」し、もう一方を編集してください。 –

+1

私はそれが意図的に避けているのは、それが他の質問に尋ねているのかどうかは不明で、私はOPに彼自身のスレッドをより明確に編集する機会を与えたいと思っていました。とにかくそれをやるべきでしょうか? – Codingo

+0

SQLバージョンを認識させようとしていますか? (アプリケーションが新しいバージョンに移行して古いDBに接続したときのように)これは本当にこれを行う方法ではないと思うからです。実際のデータアクセスとは別に列の検証をしたいと思います。あなたが自分自身を言ったように、あなたが今何をしようとしているのかにほとんど役に立たないので、私はあなたが勉強するより良い科目を選ぶことを提案したいと思います:私は芝生を刈るための恒星ポータル装置を発明しています! :) – IvanL

答えて

3

は私が正しくあなたを理解していれば、あなたはシステムビューsys.columnsを使用してそれを行うことができます:SQLで

IF EXISTS (SELECT 1 FROM sys.columns WHERE name LIKE '%ProductID') 
SELECT * 
FROM [Northwind].[dbo].[Order Details] 
+0

これを試してみましたが、列名が確実に存在しても結果を返すようには見えません。また、最初のクエリを単独で破って結果が得られませんでした。あなたが正しい方向に私を向けることができれば、なぜ個人的にでも何かを試して幸せなのかわかりません。 – Codingo

+0

上記のPEBKACエラー – Codingo

4

は、列参照が固定され、クエリが作成された時点で有効であることがわかっていなければなりません。クエリーの実行が開始された後で、列の名前が無効になることは正当ではありません。

@Igorによって提供されるソリューションは、最初にシステムテーブルをテストしてから条件付きで2番目のクエリを実行することによって、この問題を回避します。 1つのクエリで両方を実行することはできません。

+0

Tyvmを無視し、追加情報を感謝します – Codingo

関連する問題