2016-04-09 20 views
2

SQL Serverのクエリでは、常に0の結果が得られます。私はメタデータを取得したいだけです。TSQLの読み取り可能な「常にfalse」の評価

TSqlで常に偽の評価を書き込む方法は?組み込みの関数があるか、そうすることをお勧めしますか?

現在、私はWHERE 1 = 0を使用していますが、WHERE 'false'のようなものを探しています。

答えて

2

あなたは、この目的のためにwhere 1 = 0を使用することもできますが、私はtop 0がより一般的だと思う:

select top 0 . . . 
. . . 

これもwhere句で「事故」を防止します。あなたはこれを変更した場合:

where condition x or condition y 

へ:

where 1 = 0 and condition x or condition y 

括弧が間違っています。

-1

DBMS、以下の1つ以上に応じて動作します:あなたが持つことができないよう

SELECT NULL LIMIT 0 (standard SQL syntax, e.g. PostgreSQL and MySQL)/SELECT TOP 0 1 (MS SQL Server syntax) 
SELECT NULL WHERE FALSE (DBMS with a boolean type, e.g. PostgreSQL) SELECT NULL WHERE 1=0 (most DBMSes) 

がOracleの場合、これらは、DUALからフォームSELECT NULLであることが必要になります、私は、信じていますいくつかの並べ替えのFROM句なしのSELECT;どのバージョンのLIMIT/TOPが受け入れられるかわからない。

より精巧なオプションは、彼らが何の値が含まれていないにもかかわらず、関連するタイプを持っているであろう、(一時的な)表を作成し、そこに任意の行を挿入しないで、あなたに任意の数の列を与えることができたことです。

-- PostgreSQL 
CREATE TEMP TABLE dummy (a Int, b VarChar(42)); 
SELECT * FROM dummy; 

-- MS SQL Server 
CREATE TABLE #DUMMY (a Int, b VarChar(42)); 
SELECT * FROM #DUMMY; 
In PostgreSQL, you can even create a table with no columns, allowing you to have a result set with zero rows and zero columns: 

CREATE TEMP TABLE empty(); 
SELECT * FROM empty; 
Another possibility is if the DBMS has set-returning functions, they may be able to return an empty set. For instance, again in PostgreSQL as it's what I know best, you can give an invalid range to generate_series(): 

SELECT * FROM generate_series(0,-1); 

ヒント:質問を投稿する前に、GOOGLE。

+0

が返されます。私のdbms osのSQL Serverと述べたように。私はこの質問を投稿する前にグーグルで調べました。 – slartidan

+0

次に* falseを選択してください。 –

+0

'select * where false'は機能しません。これは質問がすべてであることです... – slartidan

1

SET FMTONLY ONをご覧ください。あなたがそれを設定し、クエリを実行する場合 メタデータだけは、私は0行を取得したいが、まだテーブルの*すべて*の列

USE AdventureWorks2012; 
GO 
SET FMTONLY ON; 
GO 
SELECT * 
FROM HumanResources.Employee; 
GO 
SET FMTONLY OFF; 
GO 
+0

非常にきれいな解決策です、ありがとう!私の特定のケースでは、悲しいことに、where節を使用する必要がありますが、 'FMTONLY'というキーワードが存在することは知っておいてよかったです! – slartidan

関連する問題