2017-12-14 7 views
1

テーブルあたりのカラム数が不揃いの第三者アプリケーションを使用しています。データを選択すると、ID以外のすべての列が必要になることがよくあります。またはIDとDateCreatedを除くすべての列。テーブルからアレル列を選択することは可能ですか?(例ID)?

sys.columnsを使用すると、テーブルで使用できる列を見つけることができます。この情報を使用して声明を作成するにはどうすればよいですか?これを行う最善の方法は何でしょうか?

+1

は、なぜあなたはすべての列が含まれていませんし、ちょうどあなたが同様のデータでIDを持っているという事実を無視しますか? –

+0

'SELECT'ステートメントでは、それ以外の列をすべて供給する必要があります。 – Larnu

+0

SSMSでクエリを作成しても問題がなければ、データベースを開き、探しているテーブルまでスクロールし、その隣の小さな+アイコンをクリックして、 "Columns"フォルダをクエリウィンドウにドラッグします。それはあなたにそのテーブルのすべての列のリストを取得します。次に、必要のない列を削除するだけです。 – SchmitzIT

答えて

1

このスクリプトでは、テーブルの主キー列とDateCreatedカラム名以外の任意のテーブルのすべての列を選択します。

SELECT 
'SELECT '+ 
SUBSTRING(LIST,1,LEN(LIST)-1) 
+' FROM [Person].[Address]' 
FROM 
(
SELECT 
    '['+COL.COLUMN_NAME+'],' 
    FROM INFORMATION_SCHEMA.COLUMNS COL 
     LEFT JOIN 
     (
      SELECT 
       CON.CONSTRAINT_TYPE, 
       USG.TABLE_SCHEMA, 
       USG.TABLE_NAME, 
       USG.COLUMN_NAME, 
       CON.CONSTRAINT_NAME, 
       USG.TABLE_CATALOG 
       FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE USG 
       INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CON 
        ON USG.CONSTRAINT_NAME = CON.CONSTRAINT_NAME 
     )Q 
      ON COL.TABLE_SCHEMA = Q.TABLE_SCHEMA 
       AND COL.TABLE_NAME = Q.TABLE_NAME 
       AND COL.TABLE_CATALOG = Q.TABLE_CATALOG 
       AND COL.COLUMN_NAME = Q.COLUMN_NAME 
     WHERE COL.TABLE_SCHEMA ='Person' 
      AND COL.TABLE_NAME = 'Address' 
      AND 
      (
       Q.CONSTRAINT_TYPE <> 'PRIMARY KEY' 
       OR 
       COL.COLUMN_NAME <> 'DateCreated' 
      ) 
      FOR XML PATH(''))L(LIST) 

テーブル名をスキーマでの文字列の人を交換し、あなたとアドレス

+0

魅力的な作品です!私はこれをできるだけ効率的に使う方法を見て、後ほどこの質問に投稿します。 – Steef

0

は、動的クエリを使用してみてください:

DECLARE @Names VARCHAR(MAX) 

    SELECT @Names = COALESCE(@Names + ', ', '') + Column_Name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE Table_name='Table1' 
    And Column_Name!='ID' 

    DECLARE @Query VARCHAR(MAX) 

    SELECT @Query = 'SELECT '+ @Names + ' INTO Table2 FROM Table1' 

    exec (@Query) 


    SELECT * from Table2 
+0

これは動作します。私はまたあなたの "に"加えて好きです。言及されたIDはFKのものなので、Jayasurya Satheeshの答えは良く合います。私と考えてくれてありがとう! – Steef

関連する問題