2016-11-02 5 views
0

マイクロソフトのDynamics NAVのは、各SQLテーブル名は、会社の名前が先行する機能を有し、すなわちSQL連合複数のテーブル - ストリング(TABLE_NAME)= X

  • Company1の$ G_Lエントリ
  • Company2の$ G_Lエントリ
  • Company3 $ G_Lエントリ
  • Company4 $ G_Lエントリ
  • 等...

'$ G_L Entry'で終わるすべてのテーブル、つまりすべてのテーブルを指定することなく、UNION ALL(テーブルのカラム/タイプは同じです)を作成したいと思います。

これは、いつでもNAVユーザーのユーザーが会社を追加/削除する可能性があり、その都度、クエリを更新したくないからです。

多くの方々に感謝します。あなたが持っているどのように多くのテーブルを知らないし、次にあなたが最初のテーブルのリストを指定する必要が推測

+3

会社GLエントリは単一のテーブルに格納されているので、あなたのデータ構造を修正する必要があります。はるかに効率的で、より簡単に維持するため、および照会する。 –

+0

[動的SQLを](https://msdn.microsoft.com/en-us/library/ms188001.aspx)それを行います – JohnHC

+1

@ GordonLinoffいつも可能... – JohnHC

答えて

2

あなたはすべての組合で、あなたのテーブル名を連結して動的SQLを構築することができ(。明らかにあなたは、列を一覧表示する必要があるだろう)

DECLARE @allEntryTables VARCHAR(MAX); 

SET @allEntryTables = (SELECT 
         STUFF((SELECT 
           ' UNION ALL SELECT col1, col2, col3 FROM ' + name 
           FROM sys.tables 
           WHERE name LIKE '%$G_L Entry' 
           FOR XML PATH('')), 1, 11, '')); 

EXEC (@allEntryTables); 
+1

それは素晴らしいです。 NAVは、先頭と末尾を含むスペースでいっぱいのテーブル名を作成するので、角カッコも追加しました.... –

+1

'DECLARE @allEntryTables VARCHAR(MAX); SETの@allEntryTables =( \t \t SELECT STUFF(( \t \t \t \t \t SELECT 'UNION ALL SELECT TOP(1)* FROM [' + NAME + ']' SYS.TABLES FROM \t \t \t \t \t XMLパスの\t \t \t \t \t NAME LIKE '%$ G_Lエントリ' \t \t \t \t \t( '') \t \t \t \t \t)、1,11、 '') \t)。 EXEC(@allEntryTables); ' –

0

イム(SQL Server 2012の使用)

。 sysテーブルを選択できます。 例:「名LIKE 『%の$のG_L』 sys.objects SELECT * FROMと一時 にテーブル名を挿入し、ここではあなたのテーブルのリストがあります

関連する問題