-1

私は2つのテーブルを持っています:

表1:

centers machines
------- --------
center1  machine1
center2  machine2
center2  machine3

表 2:

operation center1 center2 center3 ...
--------- ------- ------- ------- ...
oper1     ok       ok
oper2     ok              ok
oper3     ok

最初のテーブルから (コンボボックス経由で) マシンを選択すると、私は中央に配置されます。表 2 の操作は、示されているように各センターに固有です。したがって、テーブル 1 からマシンを選択した後、中心値を「center」などの変数に渡します (Executescalar() メソッドによる)。

SELECT operation from dbo.operations where "center" != null

これは、「センター」に固有のテーブル 2 からの操作のみを返す必要があります。これを達成する方法を知っている人はいますか?

4

2 に答える 2

1

まず、実際に質問に答える前に、正規化の概念を実際に調べて、可能であればテーブル構造を修正する必要があることを指摘します。オペレーションテーブルには、オペレーション、センター、ステータスの3つの列が必要です。Center1、Center2、Center3などの列が繰り返されていることは、悪い設計の明確な例です。正規化されたテーブルは、はるかに効率的で保守しやすいだけでなく、クエリの列名を変更する必要があるという問題全体を排除します。

そうは言っても:

オブジェクトを使用しSqlCommandてクエリを実行し、CommandTextそのオブジェクトにプロパティを割り当てる場合は、コマンドテキストを好きなように作成できます。たとえば、String.Format正しい列名を挿入するために使用する必要があります。クエリパラメータを使用して列名を変更することはできないため、SQLステートメントを動的に生成することに固執します。

cmd.CommandText = string.Format("SELECT operation FROM dbo.Operations WHERE {0} IS NOT NULL", center);

SQLでのすべての比較はfalseを返します(つまり、falseであり、falseでもあります)。を使用してと比較する必要があります。!= NULLNULL1 = NULL1 != NULLISIS NOTNULL

于 2012-09-11T14:34:21.697 に答える
0

使用している言語はわかりませんが、列名をパラメーター化できる言語は思いつきません。

やろうとしていることを行うには、何をしているのかわからないと非常に危険な動的 SQLを使用する必要があるため、自己責任で進めてください。

于 2012-09-11T14:32:45.050 に答える