テーブルあたりのカラム数が不揃いの第三者アプリケーションを使用しています。データを選択すると、ID以外のすべての列が必要になることがよくあります。またはIDとDateCreatedを除くすべての列。テーブルからアレル列を選択することは可能ですか?(例ID)?
sys.columnsを使用すると、テーブルで使用できる列を見つけることができます。この情報を使用して声明を作成するにはどうすればよいですか?これを行う最善の方法は何でしょうか?
テーブルあたりのカラム数が不揃いの第三者アプリケーションを使用しています。データを選択すると、ID以外のすべての列が必要になることがよくあります。またはIDとDateCreatedを除くすべての列。テーブルからアレル列を選択することは可能ですか?(例ID)?
sys.columnsを使用すると、テーブルで使用できる列を見つけることができます。この情報を使用して声明を作成するにはどうすればよいですか?これを行う最善の方法は何でしょうか?
このスクリプトでは、テーブルの主キー列と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)
テーブル名をスキーマでの文字列の人を交換し、あなたとアドレス
魅力的な作品です!私はこれをできるだけ効率的に使う方法を見て、後ほどこの質問に投稿します。 – Steef
は、動的クエリを使用してみてください:
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
これは動作します。私はまたあなたの "に"加えて好きです。言及されたIDはFKのものなので、Jayasurya Satheeshの答えは良く合います。私と考えてくれてありがとう! – Steef
は、なぜあなたはすべての列が含まれていませんし、ちょうどあなたが同様のデータでIDを持っているという事実を無視しますか? –
'SELECT'ステートメントでは、それ以外の列をすべて供給する必要があります。 – Larnu
SSMSでクエリを作成しても問題がなければ、データベースを開き、探しているテーブルまでスクロールし、その隣の小さな+アイコンをクリックして、 "Columns"フォルダをクエリウィンドウにドラッグします。それはあなたにそのテーブルのすべての列のリストを取得します。次に、必要のない列を削除するだけです。 – SchmitzIT