2017-06-27 17 views
0

I表のすべての列を一覧表示する次のSQL文を持っている、といくつかの理由では、where句の最後の2行は無視され:SQLステートメントは無視where句

AND t.name ='table1' 
AND s.name = 'dba' 

私が間違っているのは何を? これは完全なSQLコードです:

SELECT DB_Name() AS DatabaseName 
,s.[name] AS SchemaName 
,t.[name] AS TableName 
,c.[name] AS ColumnName 
,'[' + DB_Name() + ']' + '.[' + s.NAME + '].' + '[' + T.NAME + ']' AS FullQualifiedTableName 
,d.[name] AS DataType 
FROM sys.schemas s 
INNER JOIN sys.tables t ON s.schema_id = t.schema_id 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
INNER JOIN sys.types d ON c.user_type_id = d.user_type_id 
WHERE d.NAME LIKE '%int%' 
OR d.NAME LIKE '%float%' 
OR d.NAME LIKE '%decimal%' 
OR d.NAME LIKE '%numeric%' 
OR d.NAME LIKE '%real%' 
OR d.NAME LIKE '%money%' 
AND is_identity = 0 
AND t.name ='table1' 
AND s.name = 'dba' 
+1

括弧がありません –

+1

論理演算子の優先順位 – Lamak

答えて

3

は、私は確実に知ることができない状況のうち、この質問を読ん「)(」に

WHERE (d.NAME LIKE '%int%' 
OR d.NAME LIKE '%float%' 
OR d.NAME LIKE '%decimal%' 
OR d.NAME LIKE '%numeric%' 
OR d.NAME LIKE '%real%' 
OR d.NAME LIKE '%money%') AND ... 
2

をごd.Name文のすべてを入れて、あなたが何をしたい結果。私はANDが真であることと、ORのうちの1つを欲しいと思っています。この場合、次のようにクエリを変更する必要があります。

WHERE (d.NAME LIKE '%int%' 
OR d.NAME LIKE '%float%' 
OR d.NAME LIKE '%decimal%' 
OR d.NAME LIKE '%numeric%' 
OR d.NAME LIKE '%real%' 
OR d.NAME LIKE '%money%') 
AND is_identity = 0 
AND t.name ='table1' 
AND s.name = 'dba'; 

追加された括弧に注意してください。これらは、括弧内の句の1つと、外側にあるすべての句が真であることを指定します。このトピックは、論理演算子の優先順位と呼ばれ、thisスレッドで詳細に説明されています。つまり、数学の演算の順番と同じように動作します。かっこを使用して希望の順序を指定するか、またはSQLで選択できるようにすることができます。あなたはそれについてもっと読むことができますhere。また、hereは、あなたのケースAND sおよびOR秒(組み合わせと特異的に扱う物品である。

しかし、私はそれはあなたが欲しいでも、何であれば確認することはできません。SQLは、どちらか確認することはできません、これは

1

あなたのwhere句( "and"と "or")をグループ化するにはかっこを使用します。私は自分自身を試していないので、私はブーリアン演算子の先行を疑う問題...