2017-07-14 5 views
0

テーブル名を[TableX]に変更したいクエリがあります。SQL Serverの変数テーブル名+変数ルックアップ

このクエリは、異なる変数で複数回実行する必要があります。だから私は、これらの変数の値を調べることができる(一時)テーブルを作成することが可能ですか?

list language Table 
---------------------------- 
51  152   TableX 
52  154   TableY 
53  156   TableZ 

コード:

declare @list int='51'  -- change 
declare @language int='152' -- change 

insert into [DB].[Table] ([list], [value2], [language]) 
    Select 
     @list, value2, @language 
    From 
     [DB2].[TableX] -- change table name 

(、TableAの...、TableZを)あなたのデータモデルを変更する準備ができていない場合、あなたに

+3

これは、通常、データモデルとデータを不適切な方法で混合している、壊れたデータモデルの兆候です。これは、通常、属性の正確な列としてモデル化された単一の表ではなく、暗黙の属性に基づいて複数の表の1つにデータが移動する属性分割を示します。 (例えば、本質的に悪い例は、 'Gender'が列として含まれる単一の' Employees'テーブルではなく、 'MaleEmployees'と' FemaleEmployees'テーブルを持つことです) –

+0

実際のクエリは単純ではありません。アーキテクトのどちらでも - より効率的なデータの挿入方法を探しているだけです。ありがとう – Elle

+0

#[temp table]、@ Elle –

答えて

0

:もちろん

declare @list int='51'  -- change 
declare @language int='152' -- change 
DECLARE @TableX varchar(100) = 'TableX' 
DECLARE @SQL varchar(500) 

SET @SQL = 'insert into [DB].[Table] ([list], [value2], [language]) 
Select ' + CAST(@list as varchar(5)) + ' , value2, ' + CAST(@language as varchar(5)) + ' 
From 
    [DB2].[' + @TableX + '] ' 

exec @SQL 

を、これは単純な例ですが、私は非常にあなたがそれをパラメータとは、ExecuteSQL代わりの幹部を使用することをお勧めします。

0

ありがとう、しかし、あなたのテーブルが同じです、

CREATE VIEW MyTables 
AS 
    SELECT [value1], [value2], [value3], [value4], 'TableA' AS TableName 
    FROM [DB2].[TableA] 

    UNION ALL 

    /* 
    . 
    . 
    . 
    . 
    . 
    */ 

    SELECT [value1], [value2], [value3], [value4], 'TableY' 
    FROM [DB2].[TableY] 

    UNION ALL 

    SELECT [value1], [value2], [value3], [value4], 'TableZ' 
    FROM [DB2].[TableZ] 
GO 

してから使用してください:

あなたは、このようなビューを使用することができますあなたがこれを行うには、動的SQLを使用する必要があります
declare @list int= 51  -- change 
declare @language int = 152 -- change 

insert into [DB].[Table] 
     ([list] 
     ,[value2] 
     ,[language]) 

Select 
     @list, 
     value2, 
     @language 
FROM MyTables m 
    JOIN [SomeTable] s ON s.[Table] = m.TableName 
WHERE s.list = @list 
    AND s.language = @language 
関連する問題