0

SQL Server DBMS を使用しました

動的な列を持つテーブルから行を取得する必要があります

select * from TempXmlData
T1  t2  t3  t4
A   B   C   D

T1、T2、T3、T4 列は動的です。私はxml構成でそれらを作成します。もちろん、列名は別のテーブルに存在します。このように

select * from #TempA
--The Result
T1
T2
T3
T4

config に 5 つの列がある場合、このテーブルには 5 つの列があり、config に 1 つの列しかない場合、このテーブルには 1 つの列しかありません。

TempXmlData今、このテーブルから値を取得したいと思います。のように値をまとめる必要があります'A','B',‘C’,'D'。したがって、すべての列から値を取得する必要があります。列は固定されていません。

列が固定されている場合、この方法を使用して値を取得できます

select @Value = T1(columnName) from TempXmlData
4

2 に答える 2

0

動的テーブル定義は作成できません。唯一のオプションは、結果セットを返す proc を作成することです。proc 内では、#TempA テーブルから行を読み取ることにより、proc 内で SQL ステートメントを動的に構築できます。カーソルsp_executesqlについては、MS のドキュメントを参照してください。

于 2013-08-31T22:47:13.233 に答える
0

それはあなたが探しているものですか?

SQL フィドル

MS SQL Server 2008 スキーマのセットアップ:

CREATE TABLE TempA
    (columnName varchar(2))
;

INSERT INTO TempA
    (columnName)
VALUES
    ('T1'),
    ('T2'),
    ('T3'),
    ('T4')
;

CREATE TABLE TempXmlData
    (T1 varchar(1), T2 varchar(1), T3 varchar(1), T4 varchar(1))
;

INSERT INTO TempXmlData
    (T1, T2, T3, T4)
VALUES
    ('A', 'B', 'C', 'D')
;

クエリ 1 :

DECLARE @colTable table(rownum int, columnName varchar(20))
INSERT INTO @colTable SELECT row_number() over (ORDER BY columnName), columnName FROM TempA
DECLARE @query varchar(500)
DECLARE @i int, @max int
SET @i = 1
SET @max = (SELECT count(*) FROM @colTable)
SET @query = 'select '
WHILE @i <= @max
BEGIN
    IF @i > 1 SET @query = @query + ','
    SET @query = @query + (SELECT columnName FROM @colTable WHERE rownum = @i)
    SET @i = @i + 1
END
SET @query = @query + ' from TempXmlData'
exec(@query)

結果

| T1 | T2 | T3 | T4 |
|----|----|----|----|
|  A |  B |  C |  D |
于 2013-08-31T23:12:42.667 に答える