Получить псевдонимы таблиц из SQL Query - PullRequest
2 голосов
/ 19 марта 2020

Учитывая следующую таблицу:

CREATE TABLE #TestTable
(
    Code varchar(10) NOT NULL,
    Parent varchar(10) NULL
);

INSERT INTO #TestTable
SELECT 'Parent', Null UNION ALL
SELECT 'Child', 'Parent';

Я хочу иметь возможность преобразовать это:

SELECT * 
FROM #TestTable child
INNER JOIN #TestTable parent ON ( parent.Code = child.Parent );

в это:

SELECT child.Code, child.Parent, parent.Code, parent.Parent
FROM #TestTable child
INNER JOIN #TestTable parent ON ( parent.Code = child.Parent );

Использование sp_describe_first_result_set Я могу приблизиться, используя этот оператор:

EXEC sp_describe_first_result_set
N'SELECT * 
FROM #TestTable child
INNER JOIN #TestTable parent ON ( parent.Code = child.Parent )', NULL, 2;

, но он вернет исходную таблицу как #TestTable вместо child/parent.

1 Ответ

1 голос
/ 19 марта 2020

Если единственное, что вас волнует, - это посмотреть, какая таблица является исходной таблицей, вы можете разделить данные на 2 временные таблицы, таким образом вы будете влиять на source_table, возвращаемый вызовом системной хранимой процедуры.

CREATE TABLE #TestTable
(
    Code varchar(10) NOT NULL,
    Parent varchar(10) NULL
);

INSERT INTO #TestTable
SELECT 'Parent', Null UNION ALL
SELECT 'Child', 'Parent';

select * into #Parent from #TestTable where code='Parent';

select * into #Child from #TestTable where Code='Child';

EXEC sp_describe_first_result_set
N'SELECT * 
FROM #Child child
INNER JOIN #Parent parent ON ( parent.Code = child.Parent )', NULL, 2;


drop table #TestTable, #Parent, #Child;

enter image description here

...