2

次のように、テーブル名のサフィックスが別のテーブルからのものであるテーブルから選択する必要があります。

declare @value  nvarchar(3),
@table nvarchar(1000),
@SQLST NVARCHAR(255);

set  @value = N'select column1 from tableX';

EXEC @value

set @table ='partoftableY'

Set @SQLST ='select * from' +@tabel + @value -- here I create the table name

ただし、TableX (0-999) には複数の値があるため、これは機能しません。For Each 型の構造が必要ですか。

4

2 に答える 2

1

ここでは、それぞれに異なるデータを持つ 2 つのテーブル (partoftableY1 と partoftableY2) で作成した例を示します。

/*

create table tableX (column1 int);

insert into tablex 
          select 1
union all select 2;

create table partoftableY1 (data nvarchar(50));
create table partoftableY2 (data nvarchar(50));

insert into partoftableY1 select 'hey 1 here';
insert into partoftableY2 select 'hey 2 here';

*/


declare @sql nvarchar(max)

-- use the ability of SQL to build up string of all the sql you need to run

set @sql = 'select data from (select '''' as data'

select @sql = COALESCE(@sql + ' union all ', '') 
               + 'select data from partoftableY' 
               + cast(column1 as nvarchar(4)) from tableX
select @sql = @sql + ') X where data <>'''''

-- DEBUG for seeing what SQL you created
print @sql

-- Now execute the SQL
exec sp_executesql @sql= @sql

の結果が得られます

hey 1 here
hey 2 here

データの種類に合わせて調整する必要がありますが、これで主なアイデアが得られるはずです

参考までに、作成して実行した SQL を次に示します。

select data 
from  (
                select '' as data 
      union all select data from partoftableY1 
      union all select data from partoftableY2
     ) X 
where data <>''

注意

  • 実際には 1 つの長い行として作成されているため、読みやすいように書式設定して配置しました
  • ユニオン内の選択ごとに列数を同じにする必要があるため、* を選択せず​​に selet データを使用しました。必要な列を選択してから、ユニオン内の選択のすべての列が同じになるように変更する必要があります。
  • ユニオンコードを簡単にするために、ユニオンの上部にダミーの選択があります-ユニオンがすべて提示する必要があるかどうかなどの条件は必要ありません
  • ユニオン全体でアウトセレクトを使用して、ダミーセレクトのsidを取得できるようにしました
于 2012-06-04T11:40:41.587 に答える
0

これを試すことができます

DECLARE @SQLST NVARCHAR(max)='';

DECLARE @select nvarchar(max)=N'select * from partoftableY'

DECLARE @union nvarchar(max)=N'
UNION ALL
'
SELECT @SQLST=@select+column1+@union
FROM tablex

SELECT @SQLST=substring(@SQLST,1,LEN(@SQLST)-11)

EXEC sp_executesql @SQLST
于 2012-06-04T11:43:46.420 に答える