2016-09-21 11 views
0

カーソルまたはループや一時テーブルを使用せずにt-sqlでこれを行う方法はありますか?多分動的SQLを使用することによって?データベース内のすべてのテーブル内の特定の列(動的SQL)から値を検索しますか?

データベースの各テーブルの最初の列から最大値を取得します。

syscolumnsを使用して、すべてのテーブルの名前と各テーブルの最初の列の名前を表示します。

以下の(動作しない)例では、syscolumnsをループして@tabnameと@colnameのすべての値を使用する方法を見つける必要があります。それをする方法はありますか?

declare @tabname sysname; 
declare @colname sysname; 

SELECT 
name         as [column name], 
object_NAME(id)       as [table name], 
(select max(@colname) from @tabname) as [max col value] 
from syscolumns    
where colorder = 1 

ご意見やご感想をお寄せください。

よろしく、Dave。

+0

のようなクエリを使用することができます。これは実際にどのように使用できますか?各テーブルの最初の列から最大値を取得するには、動的SQLが必要です。以下のKannan氏が提供する答えは、列名を取得するという素晴らしい仕事です。動的SQLを使用して値を取得する必要があります。 –

+0

ありがとうSean。はい、他の人々の要件は、このようなフォーラムの文脈から外されていると、常に非常に奇妙です。残念ながら、私はセキュリティ上の理由から文脈を詳しく説明することはできません。 – davehants

答えて

0

あなたはどのような奇妙な要件この

;WITH cte 
AS (SELECT 
    object_id, 
    MIN(column_id) mincolumnid 
FROM sys.columns 
GROUP BY object_id) 
SELECT 
    t.name, 
    c.name 
FROM sys.tables t 
INNER JOIN sys.columns c 
    ON t.object_id = c.object_id 
INNER JOIN cte ct 
    ON c.object_id = ct.object_id 
    AND c.column_id = ct.mincolumnid 
+0

これは列名を取得しますが、OP状態の値は取得しません。これは、列名とテーブル名がすべてsyscolumnsという非常に簡単な開始クエリを使用してcolorder = 1(私がKannanに与えた返信を参照してください) –

+0

ああ私は質問を誤解していました。列名のみを取得する必要があると思いました。あなたが言われたように、すべてのテーブルをループして値を取得する必要があるかもしれません。 –

+0

うん。あなたのクエリは、動的SQLの優れた出発点です。 –

関連する問題