当前位置: 首页 > 面试题库 >

如何在视图中获取列级依赖

宗政永望
2023-03-14
问题内容

我对此事进行了一些研究,但还没有解决方案。我想得到的是视图中的列级依赖关系。所以,假设我们有一个这样的表

create table TEST(
    first_name varchar(10),
    last_name varchar(10),
    street varchar(10),
    number int
)

和这样的观点:

create view vTEST
as
    select
        first_name + ' ' + last_name as [name],
        street + ' ' + cast(number as varchar(max)) as [address]
    from dbo.TEST

我想要的是这样的结果:

column_name depends_on_column_name depends_on_table_name
----------- --------------------- --------------------
name        first_name            dbo.TEST
name        last_name             dbo.TEST
address     street                dbo.TEST
address     number                dbo.TEST

我已经尝试过sys.dm_sql_referenced_entities函数,但是referencing_minor_id对于视图来说总是为0。

select
    referencing_minor_id,
    referenced_schema_name + '.' + referenced_entity_name as depends_on_table_name,
    referenced_minor_name as depends_on_column_name
from sys.dm_sql_referenced_entities('dbo.vTEST', 'OBJECT')

referencing_minor_id depends_on_table_name depends_on_column_name
-------------------- --------------------- ----------------------
0                    dbo.TEST              NULL
0                    dbo.TEST              first_name
0                    dbo.TEST              last_name
0                    dbo.TEST              street
0                    dbo.TEST              number

无论是sys.sql_expression_dependencies过时的还是过时的,都是如此sys.sql_dependencies

那么,我会错过某些事情吗?还是做不到?

编辑1 :我试图使用DAC来查询此信息是否存储在系统基本表中的某个位置,但是找不到


问题答案:

此解决方案只能部分回答您的问题。它不适用于作为表达式的列。

您可以使用sys.dm_exec_describe_first_result_set获取列信息:

@include_browse_information

如果设置为1,则将对每个查询进行分析,就像在查询中具有FOR BROWSE选项一样。返回其他键列和源表信息。

CREATE TABLE txu(id INT, first_name VARCHAR(10), last_name VARCHAR(10));
CREATE TABLE txd(id INT, id_fk INT, address VARCHAR(100));

CREATE VIEW v_txu
AS
SELECT t.id AS PK_id,
       t.first_name  AS name,
       d.address,
       t.first_name + t.last_name AS name_full
FROM txu t
JOIN txd d
  ON t.id = d.id_fk

主要查询:

SELECT name, source_database, source_schema,
      source_table, source_column 
FROM sys.dm_exec_describe_first_result_set(N'SELECT * FROM v_txu', null, 1) ;

输出:

+-----------+--------------------+---------------+--------------+---------------+
|   name    |   source_database  | source_schema | source_table | source_column |
+-----------+--------------------+---------------+--------------+---------------+
| PK_id     | fiddle_0f9d47226c4 | dbo           | txu          | id            |
| name      | fiddle_0f9d47226c4 | dbo           | txu          | first_name    |
| address   | fiddle_0f9d47226c4 | dbo           | txd          | address       |
| name_full | null               | null          | null         | null          |
+-----------+--------------------+---------------+--------------+---------------+

DBFiddleDemo



 类似资料:
  • 问题内容: 我正在寻找一种列出数据库中所有视图的方法。 最初,我在MySQL论坛上找到并尝试了一个答案: 这怎么行不通,返回一个空集。(我知道他们在那里!) 这些也会失败: 为什么这不起作用? 问题答案: MySQL查询以查找数据库中的所有视图

  • 问题内容: 我想在列表上有一个反向列表视图(以与在列表上提供子列表视图类似的方式)。是否有提供此功能的功能? 我既不想复制列表,也不想修改列表。 在这种情况下,如果我至少可以在列表上获得一个反向迭代器就足够了。 另外,我知道自己如何实施。我只是问Java是否已经提供了类似的东西。 演示实现: 我刚刚发现有些实现正是我所需要的。尽管没有通用的实现。这有点奇怪,因为我所见过的实现足以与任何实现一起使用

  • 问题内容: 我正在尝试从烧瓶视图获取url参数: 如何从视图中获取? 问题答案: 你可以使用以下方法检索查询字符串变量 要么 你要接收的查询字符串中的变量在哪里。

  • 我有集合视图,我想在scrollViewDidScroll方法中获取当前可见的(最可见的单元格)索引路径。

  • 问题内容: 使用angular时,在视图内获取对象的首选方法是什么? 看起来好像有这个项目,但是看起来维护得不好。 https://github.com/gdi2290/angular- momentjs 问题答案: 有一个更受欢迎的angular-moment项目… https://github.com/urish/angular- moment 有了它,您可以像这样注入瞬间… jsfiddle

  • 问题内容: 在jsoup中,返回Element的所有子代(后代)。但是,我想要Element的一级子级(直系子级)。 我可以使用哪种方法? 问题答案: Element.children()仅返回直接子代。由于您将它们绑定到树上,因此它们也有孩子。 如果需要直接子元素而没有底层树结构,则需要按以下方式创建它们 输出量