Мне нужен запрос, который будет возвращать строку для каждого столбца в представлении и строку для самого представления.
Должен быть столбец basetable в результате, который дает базовую таблицу для столбца в текущей строке, и столбец basefield в результате, который дает имя столбца в базовом запросе (для переименованных столбцов). Было бы бонусом, если бы какие-либо вычисления также могли быть включены в столбец базового поля.
Я не думаю, что это можно сделать. Я не прав?
В приведенном ниже примере слово «что здесь происходит» следует заменить на table1 или table2 в зависимости от ситуации в столбце basetable и a, b или c в зависимости от ситуации в столбце basefield.
create table table1 (a int, b int)
create table table2 (a int, c int)
go
create view view1 as select table1.a, table1.b, table2.c from table1 left join table2 on table1.a = table2.a
go
select * from
(
select 'View' objecttype,O.name viewname,'' fieldname,0 column_id,'' typename,'' max_length,'' [precision], '' scale, '' is_identity,
'what goes here' basetable, '' basefield
from sys.objects O where O.type='V' and O.[schema_id] = 1
union all
select 'Field' objecttype,object_name(C.[object_id]) viewname,C.name fieldname,C.column_id,T.name typename,C.max_length,C.precision,C.scale,C.is_identity,
'what goes here' basetable, 'what goes here' basefield
from sys.columns C
left join sys.types T on C.user_type_id=T.system_type_id
where C.[object_id] in (select O.[object_id] from sys.objects O where O.type='V')
) I
where viewname in ('view1')
order by viewname, column_id
drop view view1
drop table table1
drop table table2