Udostępnij za pośrednictwem


Column Dependencies

 

Often it happens, that we want to play with a column value of a table. Not knowing the ramification of the column value, we have to resort to the back breaking manual process of finding the dependency on the column. Using the management studio, get the list of stored procedures depended on the table. Go thru each stored procedure and check which stored procedure does what with the column in question.

 

Today, I came across 29 stored procedure to be waded thru to get a column significance in a table. The UI in management studio gives the dependency on the table, but does not discuss the column level dependency. However, all this information is nicely tucked in the SQL tables. Using the following query, my quest reduced from 29 Stored procedures to 3 stored procedures. Here is the query

 

/*

      Script to get the name of stored procedure which

    effect the column

*/

declare @TableName varchar(250)

declare @ColumnName varchar(250)

declare @TableId int

declare @ColumnId int

set @TableName = 'EventDetail '

set @ColumnName = 'NotificationType'

-- Get the TableId

 

select @ColumnId = Column_id from sys.columns (nolock)

                  where object_id = Object_id (@TableName) and Name = @ColumnName

if @ColumnId is not null

begin

      select distinct o.Name, d.is_updated, d.is_selected

            from sys.objects o (nolock) join sys.sql_dependencies d (nolock)

                  on d.object_id = o.object_id

                  where d.referenced_major_id = Object_id (@TableName)

                              and ( d.class = 0 and d.referenced_minor_id = @ColumnId )

end                          

else

      begin

            select distinct o.Name

                  from sys.objects o (nolock) join sys.sql_dependencies d (nolock)

                        on d.object_id = o.object_id

                        where d.referenced_major_id = Object_id (@TableName)

      end

From BOL:

Dependencies are established during CREATE only if the referenced (independent) entity exists at the time that the referencing (dependent) object is created. Due to deferred name resolution, the referenced entity need not exist at the time of creation. In this case, a dependency row is not created. Moreover, entities referenced through dynamic SQL do not establish dependencies.

Comments

  • Anonymous
    April 11, 2007
    Not bad. Neat trick. But it only seems to work under SQL 2005 - at least that's what I presume since it choked on SQL 2000.

  • Anonymous
    April 11, 2007
    Yes, I tested it only with SQL 2005.

  • Anonymous
    September 25, 2007
    works great. Thanks!

  • Anonymous
    February 12, 2009
    This is just what I need! Saves me a lot of time! Thank you thank you!!

  • Anonymous
    March 30, 2009
    Saved me a few hours work - thanks