2016-12-09 13 views

答えて

3

として結果を使用したい:

SELECT column 
INTO #tmp 
FROM table; 


UPDATE table 
    SET column = 1 
    WHERE column in (SELECT column FROM #tmp); 

ます。また、テーブル変数を使用することができますしかし、それはcolの型を指定する必要があります変数を定義する列。

+0

アメージング.....ようなものになるだろう変数のいずれかの種類にそれを配置する必要があります。どうもありがとうございます。今は本当に簡単です。 – platinums

+0

には#tmpテーブルのクリーンアップコマンドがあり、リピートクエリーのためにそれをクリアします。私は#tmp存在 - ああドロップ#tmpについてのメッセージを受け取りましたか? – platinums

+0

@プラチナ。 。 。一時テーブルとテーブル変数は、*ストアドプロシージャ*ブロックの終わりに削除されます。 1つのコードブロック内でコードを繰り返し実行する場合は、テーブルを削除する必要があります。 –

3

実際に変数(実行時にのみ使用可能)の形式にしたい場合は、TABLE変数を宣言できます。

DECLARE @variable TABLE (Column1 INT); 
INSERT INTO @variable 
SELECT Column FROM Table 

良い方法はSELECT INTOで一時テーブルを作成するには、次のようになります。

SELECT Column 
INTO #variable 
FROM table; 

ザ・あなたが任意のクエリで正規表として@variableまたは#variableを使用することができます。

UPDATE table 
SET Column = 1 
WHERE column IN (SELECT COLUMN FROM @variable) 

or 

UPDATE table 
SET Column = 1 
WHERE column IN (SELECT COLUMN FROM #variable) 

私はスタイルに参加をお勧めします/希望が:

UPDATE t 
SET column = 1 
FROM table t 
    INNER JOIN #variable v on t.column = v.column 

私はテーブル変数を使用することはお勧めしませんが、最も重要なものの一つは、パフォーマンスのためにある多数の理由があります。理由。

クエリオプティマイザは、@variableに多数の行があるシナリオで最適な実行計画が生成されないように、テーブル変数からデータを読み取るときに常に1の見積もりを生成します。あなたが複数の値を扱っているなら、あなたは.......

Declare @t TABLE (Value INT) 

INSERT INTO @t (Value) 
SELECT column FROM table 

ようTABLE VARIABLE

何かを使用する必要があります

1

は今、あなたのアップデートでのようなものを、この表の変数を使用します。.. ...

UPDATE table 
SET column=1 
WHERE column in (Select Value from @t) 

しかし、なぜあなたは単に直接とき、テーブルから選択カントレコードを更新、なぜあなたもこれを行うとにかく

UPDATE table 
    SET column=1 
    WHERE column in (SELECT column FROM table) 

ORより良い方法が

UPDATE t1 
    SET t1.column=1 
    FROM table1 t1 
    INNER JOIN Table2 ON t1.Column = t2.column 
関連する問題