0

「TcpEvent」、「RdpEvent」、「WebEvent」など、「イベント」という単語で終わるテーブル名を持つ複数のテーブルがあります。テーブル スキーマには、「ID」、「名前」、「日付」などの一般的な列がほとんどありません。

単純な SINGLE 選択を使用してすべての共通列コンテンツを取得できる汎用 SQL はありますか? 次のSQLで試しましたが、うまくいきません。

SELECT ID, Name FROM (SELECT TABLE_NAME FROM ( 
    SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME LIKE '%Event') AS T) AS T;

どんな助けでも大歓迎です。

4

2 に答える 2

1

動的 SQL を使用してこれを実現できます。サンプルは次のとおりです:(ヒントが得られるかもしれません)


declare @str varchar(max)
declare @str1 varchar(100)
set @str = 'select ID,Name from '
set @str1 = 'select ID,Name from '
select @str = @str +  TABLE_NAME + ' UNION ALL ' + @str1 FROM (SELECT Distinct TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME LIKE '%Event') A
IF CHARINDEX('UNION ALL',@str, 0) > 0
    SET @str = SUBSTRING(@str,0, len(@str)-len('UNION ALL select ID,Name from '))
print @str
于 2013-03-25T20:19:16.813 に答える
1

これらのテーブルと共通の列に基づいてビューを作成します。

create v_events as 
    select id, name, date, 'tcp' as eventtype from tcpEvent union all
    select id, name, date, 'rdp' as eventtype from rdpEvent union all
    select id, name, date, 'web' as eventtype from webEvent;

別の方法は、(ステートメントを介して) 動的 SQL を使用することprepareです。共通のビューを持つことは、おそらく最も簡単で保守しやすい方法です。

于 2013-03-25T19:46:52.813 に答える