Каков исходный столбец каждого столбца в поле зрения
Как я могу знать для каждого столбца в представлении, или процедура исходного столбца
Например, у меня есть эта таблица:
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
столбец является наиболее представительным примером, поскольку столбцы таблицы, используемые столбцом представления, зависят от значения другого столбца, который не используется непосредственно для значения столбца.