2010-12-17 10 views

答えて

6

これは、クエリが行を返さないようにするためだけに使用できます。私は時折、 "結果が見つかりません"というタイプのロジックをテストしました。

15

SQL Serverでは、あなたはすぐにこの

select * into Newtable 
from Oldtable 
where 1 = 0 

のような任意のデータなしでテーブルのコピーを作成することができ、これは古いテーブルと同じ構造を持つ新しいテーブルを作成するには、

もう一つの選択肢であります空の結果セットを返す

+0

同じ効果でさらに簡単に: 'select * into Newtable oldtable ここで0' – Jpsy

3

私はいくつかのユーティリティがその構文を使用してテーブルに関するメタデータを収集するのを見てきました。彼らは、select * from sometable where 1=0のようなクエリを実行して、データなしでテーブルから列を「効率的に」取得することができる。

+0

はMySQLでは動作しません。それが「SHOW COLUMNS」の目的です。 – ceejayoz

+0

@ceejayoz:情報をありがとう。私はMySQLについてそれを知らなかった。私は(明らかに間違って)空の結果セットを返すと仮定しましたが、空の結果セットはまだ列を持ちます。他のSQL実装でも動作します(少なくともいくつか)。 –

-1

これは、値のチェックボックスリストに基づいてSQLを生成するときに、このコードで使用しました。私は、ユーザーが果実のリストから選択することができますたとえば、:

string sqlWhere = "select * from fruit where 1 = 0" 
if (FruitList.Any()) { 
    sqlWhere += " or code in (" 
    foreach (Fruit in FruitList) 
     sqlWhere += string.Format("'{0}',"); 
    /*Add the close parens*/ 
    sqlWhere = sqlWhere.Substring(0,sqlWhere.Length-2) + ")"; 
} 

りんご オレンジ 梨

を...そして、彼らはリンゴとオレンジを選択し、私の擬似コードは次のようになります

これは、ユーザーが選択した値のみを返します。果物を選択しない場合、結果は返されません。

*このコードではSQLインジェクションは考慮されていませんのでご注意ください。あなたの場合 - データベースへの接続がまだ開いていると、データベースがそうで健康であるかどうかをチェックする「ピング」として、このようなクエリを使用することができ

where 1 = 0 
+0

あなたのANDはORになる必要があると思います。 – ceejayoz

+0

あなたはそうです。更新しました。 –

0

が表示される場合があります理由のほんの一例結果は得られませんが、何らかのエラーが発生した場合は問題があります。何らかの種類のシステムテーブルに対してクエリを記述します。あなたのデータベースによっては、PostgreSQLでもっと簡単なことができるかもしれません。ちょうどselect 1;と言うことができます.Oracleでは、私はselect 1 from dual;を見ました。あなたのデータベースがselectのフリーフロー表現を扱う能力を持たず、デュアルと同等のものを持っていなければ、select * from sometable where 0 = 1;のようなことができます。