Каков исходный столбец каждого столбца в поле зрения

Как я могу знать для каждого столбца в представлении, или процедура исходного столбца
Например, у меня есть эта таблица:

CREATE TABLE [dbo].[tbl_Address](
    [iAddressId] [int] IDENTITY(1,1) NOT NULL,
    [nvStreet] [nvarchar](50) NULL,
    [iHouseNum] [int] NULL,
    [nvEnterance] [nvarchar](10) NULL,
    [iFloor] [int] NULL,
    [nvNeighberwood] [nvarchar](20) NULL,
    [nvCity] [nvarchar](20) NULL,
    [nvNote] [nvarchar](50) NULL,
 CONSTRAINT [PK_tbl_Address] PRIMARY KEY CLUSTERED 
(
    [iAddressId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

И это мнение:

CREATE VIEW ViewALIAS
AS
SELECT a.nvStreet myStreet,a.nvCity manyStreeats FROM tbl_Address a  

Требуемый ответ:

nameObject | nameColumn | SourceObject | SourceColumn  
----------------------------------------------------- 
tbl_Address| nvStreet   | ViewALIAS    | myStreet  
tbl_Address| nvCity     | ViewALIAS    | manyStreeats

Я знаю, как сделать столбцы: nameObject, nameColumn, SourceObject или стол: nameObject, SourceObject, SourceColumn
Но я не знаю, как сопоставить х и т

1 ответ

Я думаю, что вы не можете получить именно то, что вы хотите (см. Объяснение ниже), но вы можете получить приближение, сначала вы можете получить все столбцы вида, используя:

select name, column_id from sys.columns where object_id=object_id('ViewALIAS')

и затем вы можете получить столбцы, на которые ссылается представление, используя зависимости столбцов, обратите внимание, что сюда входят все столбцы, используемые в любой части запроса, а не только столбцы в списке выбора (например, в нем будет указан столбец, используемый в WHERE состояние):

select dependencies.referenced_entity_name as referenced_name,
  entities.referenced_minor_id as column_id, entities.referenced_minor_name as column_name
from sys.sql_expression_dependencies as dependencies
join sys.objects as objects on object_id=referencing_id
join sys.schemas as schemas on schemas.schema_id=objects.schema_id
cross apply sys.dm_sql_referenced_entities(schemas.name+'.'+objects.name,'OBJECT') as entities
where entities.referenced_entity_name=dependencies.referenced_entity_name
  and (is_schema_bound_reference=0 or entities.referenced_minor_id=dependencies.referenced_minor_id)
  and entities.referenced_minor_id!=0
  and referencing_id=object_id('ViewALIAS')


Вы не можете связать два результата, потому что, насколько я знаю, в SQL Server нет способа получить связь между столбцами представления и ссылочными столбцами в представлениях каталога объектов, я не знаю точную причину, но я вполне Убедитесь, что основной причиной является то, что столбец представления может быть почти любым, поэтому не всегда возможно сопоставить его со столбцом таблицы, несколько примеров:

CREATE VIEW ExampleView AS
SELECT ID, -- table column
  (Value1+Value2)*Value3 as Total, -- multiple columns
  12345 as Value, -- literal value
  getdate() as CurrentDate, -- scalar function
  dbo.fnMyFunction(Value1,Value2) as ScalarColumn, -- scalar function with parameters
  TableFunctionColumn, -- column from a table function (which can be almost anything)
  CASE WHEN Value1<10000 THEN Value2
    WHEN Value1>20000 THEN Value3
    ELSE Value2+Value3 END AS CaseColumn, -- different columns based on another value
  (SELECT SUM(OtherValue) FROM OtherTable
    WHERE OtherID=ID GROUP BY OtherValue) AS SubqueryColumn -- subquery result
FROM ExampleTable
CROSS APPLY dbo.fnTableFunction(ID)

я думаю CASE столбец является наиболее представительным примером, поскольку столбцы таблицы, используемые столбцом представления, зависят от значения другого столбца, который не используется непосредственно для значения столбца.

Другие вопросы по тегам