How to find if a column is referenced in a computed column?Why does OBJECT_ID return NULL in a computed column?Deadlocks on primary key row locks race condition with temporal tablesMulti-schema, multi-tenant databases - data isolation through composite primary keyshow to find the database context of the last sql statement?How to find Stored Procedures With Recompile?Validate data between two large tablesHow to create a Hash Computed Column for Many Columns?HashBytes Computed Column: Exclude ColumnSQL Server: Covering indexes including all columns?Mimicking cascading foreign key referencing system table

In the time of the mishna, were there Jewish cities without courts?

Volunteering in England

Python "triplet" dictionary?

Can a creature tell when it has been affected by a Divination wizard's Portent?

How can I get precisely a certain cubic cm by changing the following factors?

Transfer over $10k

Need help understanding harmonic series and intervals

Is it possible to Ready a spell to be cast just before the start of your next turn by having the trigger be an ally's attack?

Is it possible to measure lightning discharges as Nikola Tesla?

Was it really necessary for the Lunar Module to have 2 stages?

Possible to set `foldexpr` using a function reference?

Why is current rating for multicore cable lower than single core with the same cross section?

What's the polite way to say "I need to urinate"?

What is the difference between `a[bc]d` (brackets) and `ab,cd` (braces)?

What does "rf" mean in "rfkill"?

What does 「再々起」mean?

Confused by notation of atomic number Z and mass number A on periodic table of elements

How to set printing options as reverse order as default on 18.04

Phrase for the opposite of "foolproof"

Why does processed meat contain preservatives, while canned fish needs not?

How to stop co-workers from teasing me because I know Russian?

Pressure to defend the relevance of one's area of mathematics

What are the spoon bit of a spoon and fork bit of a fork called?

You look catfish vs You look like a catfish



How to find if a column is referenced in a computed column?


Why does OBJECT_ID return NULL in a computed column?Deadlocks on primary key row locks race condition with temporal tablesMulti-schema, multi-tenant databases - data isolation through composite primary keyshow to find the database context of the last sql statement?How to find Stored Procedures With Recompile?Validate data between two large tablesHow to create a Hash Computed Column for Many Columns?HashBytes Computed Column: Exclude ColumnSQL Server: Covering indexes including all columns?Mimicking cascading foreign key referencing system table






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








6















I'm trying to mass retype columns. That means first dropping and recreating any constraints they are part of.



I found columns referenced by these constraints



  • Foreign Keys,

  • Primary Keys,

  • Indexes,

  • Check constraints,

  • Rules,

  • Default constraints.

But I cannot find Computed columns.



I've looked into INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, but it doesn't include Computed Columns.



There is also sys.computed_columns which shows definition, but doesn't list columns in searchable manner.



Is there anywhere else I can look? If SQL Server can figure out the dependence, I thought I would be able to as well.










share|improve this question

















  • 1





    Did you look into sys.dm_sql_referenced_entities?

    – Scott Hodgin
    Apr 25 at 13:34











  • Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

    – Zikato
    Apr 25 at 14:10

















6















I'm trying to mass retype columns. That means first dropping and recreating any constraints they are part of.



I found columns referenced by these constraints



  • Foreign Keys,

  • Primary Keys,

  • Indexes,

  • Check constraints,

  • Rules,

  • Default constraints.

But I cannot find Computed columns.



I've looked into INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, but it doesn't include Computed Columns.



There is also sys.computed_columns which shows definition, but doesn't list columns in searchable manner.



Is there anywhere else I can look? If SQL Server can figure out the dependence, I thought I would be able to as well.










share|improve this question

















  • 1





    Did you look into sys.dm_sql_referenced_entities?

    – Scott Hodgin
    Apr 25 at 13:34











  • Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

    – Zikato
    Apr 25 at 14:10













6












6








6








I'm trying to mass retype columns. That means first dropping and recreating any constraints they are part of.



I found columns referenced by these constraints



  • Foreign Keys,

  • Primary Keys,

  • Indexes,

  • Check constraints,

  • Rules,

  • Default constraints.

But I cannot find Computed columns.



I've looked into INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, but it doesn't include Computed Columns.



There is also sys.computed_columns which shows definition, but doesn't list columns in searchable manner.



Is there anywhere else I can look? If SQL Server can figure out the dependence, I thought I would be able to as well.










share|improve this question














I'm trying to mass retype columns. That means first dropping and recreating any constraints they are part of.



I found columns referenced by these constraints



  • Foreign Keys,

  • Primary Keys,

  • Indexes,

  • Check constraints,

  • Rules,

  • Default constraints.

But I cannot find Computed columns.



I've looked into INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, but it doesn't include Computed Columns.



There is also sys.computed_columns which shows definition, but doesn't list columns in searchable manner.



Is there anywhere else I can look? If SQL Server can figure out the dependence, I thought I would be able to as well.







t-sql sql-server-2016 dmv system-tables






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Apr 25 at 11:14









ZikatoZikato

29419




29419







  • 1





    Did you look into sys.dm_sql_referenced_entities?

    – Scott Hodgin
    Apr 25 at 13:34











  • Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

    – Zikato
    Apr 25 at 14:10












  • 1





    Did you look into sys.dm_sql_referenced_entities?

    – Scott Hodgin
    Apr 25 at 13:34











  • Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

    – Zikato
    Apr 25 at 14:10







1




1





Did you look into sys.dm_sql_referenced_entities?

– Scott Hodgin
Apr 25 at 13:34





Did you look into sys.dm_sql_referenced_entities?

– Scott Hodgin
Apr 25 at 13:34













Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

– Zikato
Apr 25 at 14:10





Yes, that's not it. But you pointed me in the right direction and I found it in sys.sql_expression_dependencies.

– Zikato
Apr 25 at 14:10










2 Answers
2






active

oldest

votes


















6














Thanks to Scott Hodgin I found it in sys.sql_expression_dependencies



SELECT 
OBJECT_NAME(sed.referencing_id) AS referencingTable
, pc.[name] AS computedColumn
, pc.is_computed
, cc.[name] AS referencedcolumn
, cc.is_computed
FROM sys.sql_expression_dependencies sed
JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
WHERE sed.referencing_minor_id > 0 -- referencing object is Column
AND sed.referenced_minor_id > 0 -- referenced object is Column
AND sed.referencing_id = sed.referenced_id -- references the same table





share|improve this answer






























    3















    There is also sys.computed_columns which shows definition, but doesn't
    list columns in searchable manner.




    If I understand correctly you want to find which columns are referenced by the computed column.



    One solution would be searching the definition in sys.computed_columns with CHARINDEX() for each column where the object_id matches



    SELECT DISTINCT c.name, 
    cc.definition
    FROM sys.columns c
    CROSS APPLY
    (
    SELECT definition from sys.computed_columns cc
    WHERE c.object_id = cc.object_id
    AND CHARINDEX(c.name,cc.definition) > 0
    ) as cc;



    Quick test



    --Create a heap table.
    CREATE TABLE dbo.test(id int,
    val int);
    -- add computed column on two columns.
    ALTER TABLE dbo.test
    ADD computedcolumn as id + val;

    -- add a column that is not part of any computed column.
    ALTER TABLE dbo.test
    ADD bla int;


    The query for one specific table



    SELECT DISTINCT c.name, 
    cc.definition
    FROM sys.columns c
    CROSS APPLY
    (
    SELECT definition from sys.computed_columns cc
    WHERE c.object_id = cc.object_id
    AND CHARINDEX(c.name,cc.definition) > 0
    ) as cc
    where c.object_id = object_id('dbo.test');


    Result



    name definition
    id ([id]+[val])
    val ([id]+[val])





    share|improve this answer




















    • 3





      Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

      – Zikato
      Apr 25 at 12:39











    • @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

      – Randi Vertongen
      Apr 25 at 12:44











    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "182"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f236660%2fhow-to-find-if-a-column-is-referenced-in-a-computed-column%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6














    Thanks to Scott Hodgin I found it in sys.sql_expression_dependencies



    SELECT 
    OBJECT_NAME(sed.referencing_id) AS referencingTable
    , pc.[name] AS computedColumn
    , pc.is_computed
    , cc.[name] AS referencedcolumn
    , cc.is_computed
    FROM sys.sql_expression_dependencies sed
    JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
    JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
    WHERE sed.referencing_minor_id > 0 -- referencing object is Column
    AND sed.referenced_minor_id > 0 -- referenced object is Column
    AND sed.referencing_id = sed.referenced_id -- references the same table





    share|improve this answer



























      6














      Thanks to Scott Hodgin I found it in sys.sql_expression_dependencies



      SELECT 
      OBJECT_NAME(sed.referencing_id) AS referencingTable
      , pc.[name] AS computedColumn
      , pc.is_computed
      , cc.[name] AS referencedcolumn
      , cc.is_computed
      FROM sys.sql_expression_dependencies sed
      JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
      JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
      WHERE sed.referencing_minor_id > 0 -- referencing object is Column
      AND sed.referenced_minor_id > 0 -- referenced object is Column
      AND sed.referencing_id = sed.referenced_id -- references the same table





      share|improve this answer

























        6












        6








        6







        Thanks to Scott Hodgin I found it in sys.sql_expression_dependencies



        SELECT 
        OBJECT_NAME(sed.referencing_id) AS referencingTable
        , pc.[name] AS computedColumn
        , pc.is_computed
        , cc.[name] AS referencedcolumn
        , cc.is_computed
        FROM sys.sql_expression_dependencies sed
        JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
        JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
        WHERE sed.referencing_minor_id > 0 -- referencing object is Column
        AND sed.referenced_minor_id > 0 -- referenced object is Column
        AND sed.referencing_id = sed.referenced_id -- references the same table





        share|improve this answer













        Thanks to Scott Hodgin I found it in sys.sql_expression_dependencies



        SELECT 
        OBJECT_NAME(sed.referencing_id) AS referencingTable
        , pc.[name] AS computedColumn
        , pc.is_computed
        , cc.[name] AS referencedcolumn
        , cc.is_computed
        FROM sys.sql_expression_dependencies sed
        JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
        JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
        WHERE sed.referencing_minor_id > 0 -- referencing object is Column
        AND sed.referenced_minor_id > 0 -- referenced object is Column
        AND sed.referencing_id = sed.referenced_id -- references the same table






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Apr 25 at 14:13









        ZikatoZikato

        29419




        29419























            3















            There is also sys.computed_columns which shows definition, but doesn't
            list columns in searchable manner.




            If I understand correctly you want to find which columns are referenced by the computed column.



            One solution would be searching the definition in sys.computed_columns with CHARINDEX() for each column where the object_id matches



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc;



            Quick test



            --Create a heap table.
            CREATE TABLE dbo.test(id int,
            val int);
            -- add computed column on two columns.
            ALTER TABLE dbo.test
            ADD computedcolumn as id + val;

            -- add a column that is not part of any computed column.
            ALTER TABLE dbo.test
            ADD bla int;


            The query for one specific table



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc
            where c.object_id = object_id('dbo.test');


            Result



            name definition
            id ([id]+[val])
            val ([id]+[val])





            share|improve this answer




















            • 3





              Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

              – Zikato
              Apr 25 at 12:39











            • @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

              – Randi Vertongen
              Apr 25 at 12:44















            3















            There is also sys.computed_columns which shows definition, but doesn't
            list columns in searchable manner.




            If I understand correctly you want to find which columns are referenced by the computed column.



            One solution would be searching the definition in sys.computed_columns with CHARINDEX() for each column where the object_id matches



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc;



            Quick test



            --Create a heap table.
            CREATE TABLE dbo.test(id int,
            val int);
            -- add computed column on two columns.
            ALTER TABLE dbo.test
            ADD computedcolumn as id + val;

            -- add a column that is not part of any computed column.
            ALTER TABLE dbo.test
            ADD bla int;


            The query for one specific table



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc
            where c.object_id = object_id('dbo.test');


            Result



            name definition
            id ([id]+[val])
            val ([id]+[val])





            share|improve this answer




















            • 3





              Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

              – Zikato
              Apr 25 at 12:39











            • @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

              – Randi Vertongen
              Apr 25 at 12:44













            3












            3








            3








            There is also sys.computed_columns which shows definition, but doesn't
            list columns in searchable manner.




            If I understand correctly you want to find which columns are referenced by the computed column.



            One solution would be searching the definition in sys.computed_columns with CHARINDEX() for each column where the object_id matches



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc;



            Quick test



            --Create a heap table.
            CREATE TABLE dbo.test(id int,
            val int);
            -- add computed column on two columns.
            ALTER TABLE dbo.test
            ADD computedcolumn as id + val;

            -- add a column that is not part of any computed column.
            ALTER TABLE dbo.test
            ADD bla int;


            The query for one specific table



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc
            where c.object_id = object_id('dbo.test');


            Result



            name definition
            id ([id]+[val])
            val ([id]+[val])





            share|improve this answer
















            There is also sys.computed_columns which shows definition, but doesn't
            list columns in searchable manner.




            If I understand correctly you want to find which columns are referenced by the computed column.



            One solution would be searching the definition in sys.computed_columns with CHARINDEX() for each column where the object_id matches



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc;



            Quick test



            --Create a heap table.
            CREATE TABLE dbo.test(id int,
            val int);
            -- add computed column on two columns.
            ALTER TABLE dbo.test
            ADD computedcolumn as id + val;

            -- add a column that is not part of any computed column.
            ALTER TABLE dbo.test
            ADD bla int;


            The query for one specific table



            SELECT DISTINCT c.name, 
            cc.definition
            FROM sys.columns c
            CROSS APPLY
            (
            SELECT definition from sys.computed_columns cc
            WHERE c.object_id = cc.object_id
            AND CHARINDEX(c.name,cc.definition) > 0
            ) as cc
            where c.object_id = object_id('dbo.test');


            Result



            name definition
            id ([id]+[val])
            val ([id]+[val])






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Apr 25 at 12:22

























            answered Apr 25 at 12:14









            Randi VertongenRandi Vertongen

            5,3361926




            5,3361926







            • 3





              Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

              – Zikato
              Apr 25 at 12:39











            • @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

              – Randi Vertongen
              Apr 25 at 12:44












            • 3





              Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

              – Zikato
              Apr 25 at 12:39











            • @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

              – Randi Vertongen
              Apr 25 at 12:44







            3




            3





            Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

            – Zikato
            Apr 25 at 12:39





            Good answer. Parsing occured to me and this is a good way to go about it. I was looking for a system catalogue, but I see I didn't specify it in the question. If there isn't a better answer, I'll accept it.

            – Zikato
            Apr 25 at 12:39













            @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

            – Randi Vertongen
            Apr 25 at 12:44





            @Zikato Thanks! I agree that there should be a better way to get it than parsing, maybe someone else knows a way to get it through a dmv.

            – Randi Vertongen
            Apr 25 at 12:44

















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Database Administrators Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f236660%2fhow-to-find-if-a-column-is-referenced-in-a-computed-column%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Get product attribute by attribute group code in magento 2get product attribute by product attribute group in magento 2Magento 2 Log Bundle Product Data in List Page?How to get all product attribute of a attribute group of Default attribute set?Magento 2.1 Create a filter in the product grid by new attributeMagento 2 : Get Product Attribute values By GroupMagento 2 How to get all existing values for one attributeMagento 2 get custom attribute of a single product inside a pluginMagento 2.3 How to get all the Multi Source Inventory (MSI) locations collection in custom module?Magento2: how to develop rest API to get new productsGet product attribute by attribute group code ( [attribute_group_code] ) in magento 2

            Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

            Magento 2.3: How do i solve this, Not registered handle, on custom form?How can i rewrite TierPrice Block in Magento2magento 2 captcha not rendering if I override layout xmlmain.CRITICAL: Plugin class doesn't existMagento 2 : Problem while adding custom button order view page?Magento 2.2.5: Overriding Admin Controller sales/orderMagento 2.2.5: Add, Update and Delete existing products Custom OptionsMagento 2.3 : File Upload issue in UI Component FormMagento2 Not registered handleHow to configured Form Builder Js in my custom magento 2.3.0 module?Magento 2.3. How to create image upload field in an admin form