<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'SQL Server 2008', 'DMVs', and 'sp_depends'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=SQL+Server+2008,DMVs,sp_depends&amp;orTags=0</link><description>Search results matching tags 'SQL Server 2008', 'DMVs', and 'sp_depends'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Keeping sysdepends up to date in SQL Server 2008</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/keeping-sysdepends-up-to-date-in-sql-server-2008.aspx</link><pubDate>Tue, 09 Sep 2008 21:04:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:8823</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;&lt;font size="4"&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;sysdepends&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;b&gt;&lt;font size="4"&gt;, &lt;span&gt;sp_depends&lt;/span&gt; and &lt;span&gt;sys.sql_dependencies&lt;/span&gt;&lt;/font&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p&gt;Since my very first experience with SQL Server (version
6.5), I have used the system table &lt;span&gt;sysdepends&lt;/span&gt; and the
system stored procedure &lt;span&gt;sp_depends&lt;/span&gt; to track dependency
information in my databases.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The purpose
of tracking dependency information is to allow me to determine which objects
are required; this can prevent me from deploying only parts of a solution, and not
realizing it until runtime.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It is also a
quick way to get a visual picture of a database's organization.&amp;nbsp;&amp;nbsp;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;


&lt;p&gt;A new catalog view was introduced with SQL Server 2005,
called &lt;span&gt;sys.sql_dependencies&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Other than the fact that this uses the new
sys schema and has a different column set, I have yet to stumble upon any case
where dependency information is tracked differently in this new view, when
compared to &lt;span&gt;sysdepends&lt;/span&gt;.&lt;/p&gt;


&lt;p&gt;As you can imagine, based on the volume of activity in newsgroups and other forums involving sysdepends, this has not always been a smooth exercise.&amp;nbsp; Sadly, these system objects are not perfect, due to several
complications; I will first discuss some of these limitations, and then I will
provide a better solution that will take care of a couple of them, at least.&lt;/p&gt;


&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Dropping / Renaming
Dependent Objects&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;A problem that has been around since the 6.5 days (see &lt;a target="_blank" href="http://support.microsoft.com/kb/115333"&gt;KB #115333&lt;/a&gt;) is that when you create a table, then create a stored procedure that references
the table, and then drop the table; the dependency information remains in &lt;span&gt;sysdepends&lt;/span&gt;, but points to an &lt;span&gt;object_id&lt;/span&gt;
that no longer exists.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The table may
later get re-created, but it will almost certainly have a different associated &lt;span&gt;object_id&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Furthermore,
in older versions of SQL Server, the old reference could remain orphaned in &lt;span&gt;sysdepends&lt;/span&gt; permanently; thankfully, this has been fixed in modern
versions.&lt;span&gt;&amp;nbsp; &lt;/span&gt;But even in SQL Server 2008, because
dependency information is not refreshed during DDL events such as CREATE TABLE,
a new reference is not created unless you force it to happen – by dropping and
re-creating the procedure, or calling &lt;span&gt;&lt;span&gt;sys.sp_refreshsqlmodule&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;This problem can also affect the ability of the system to
track dependency on columns.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Consider
the case where you write a stored procedure that references columns 'a' and 'b'
of table 't', then you drop column 'a' and rename column 'b' to 'c'.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Some of the mess is left in &lt;span&gt;sysdepends&lt;/span&gt; and &lt;span&gt;sys.sql_dependencies&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Thankfully, the system will not let you create
a procedure that references a column that does not exist (unless the table also
does not exist), but once the stored procedure is created, there is nothing
stopping you from changing the column (such as renaming it) or dropping it from
the table altogether.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In this case there
is nothing in &lt;span&gt;sysdepends&lt;/span&gt; or &lt;span&gt;sys.sql_dependencies&lt;/span&gt;
that indicates the stored procedure is referencing a column that no longer
exists… the user is left to find that out at runtime. &lt;i&gt;&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Cross-Database and
Cross-Server Dependencies&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;The system table &lt;span&gt;sysdepends&lt;/span&gt; does
not maintain dependency information for any objects located outside of the
local database.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This means that if you
want to check the validity of objects with three- or four-part names in SQL
Server 2005 or earlier, you are going to have to manually parse the definitions
of all of your objects.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Native tools are
never going to report the validity of cross-database or cross-server
dependencies, but in SQL Server 2008, you will be able to get a report of the
dependencies that are expected – without any nasty parsing.&lt;i&gt;&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Deferred Name
Resolution&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;In SQL Server 7.0, Microsoft started a practice that many of
us regret today: deferred name resolution.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;This allows you to create an object (such as a stored procedure) that
references another object (such as a view or table) that does not yet
exist.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The assumption here is that you
will create the procedure now, but won't actually call it until later, after
the view or table has been created.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The
problem is that, by default, the dependency information is not updated when the
view or table is created; so, even though your structure is intact, the
dependency checks cannot be made (so, the table could later be dropped, and
nothing would be checked).&lt;span&gt;&amp;nbsp; &lt;/span&gt;Deferred name
resolution also allows you to create objects with circular references; for
example, procedure A calls procedure B, B calls C, and C might conditionally call
A.&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Deferred name resolution does not allow you to reference an
object at a linked server, or reference an invalid column for an object that
exists on the current instance.&lt;span&gt;&amp;nbsp; &lt;/span&gt;But it
does allow you to reference an object in any database on the current instance
that does not yet exist.&lt;span&gt;&amp;nbsp; &lt;/span&gt;(To understand
better why it works this way, you can read more about deferred name resolution
here: &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms190686(SQL.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms190686(SQL.90).aspx&lt;/a&gt;
(SQL 2005) and here: &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms190686(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms190686(SQL.100).aspx&lt;/a&gt;
(SQL 2008).)&lt;/p&gt;

&lt;p&gt;One of the greatest adversaries of deferred name resolution
is fellow SQL Server MVP, &lt;span&gt;Erland&lt;/span&gt; &lt;span&gt;Sommarskog&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;He calls for a much more strict set of
checks, similar to OPTION EXPLICIT in Visual Basic, which would prevent
deferred name resolution all.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You can
read about this in his article at the following URL: &lt;a target="_blank" href="http://www.sommarskog.se/strict_checks.html"&gt;http://www.sommarskog.se/strict_checks.html&lt;/a&gt;
and a Connect item at the following URL:&lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260762"&gt;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260762&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To correct dependencies for a table that has been created
after objects that reference it, you can manually call the system stored
procedure &lt;span&gt;sys.sp_refreshsqlmodule&lt;/span&gt; for each
referencing object.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The trick here still
is to determine which objects might reference it; this part, at least, is
solved to some extent in SQL Server 2008, and I will talk about this further on.&lt;i&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Dynamic SQL&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Another problem is when you have a stored procedure that
refers to an object in dynamic SQL.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The
system does not parse the contents of dynamic SQL that is executed via EXEC()
or &lt;span&gt;sp_executeSQL&lt;/span&gt;, even if it is passed or created in
its entirety in a variable; so you can have a stored procedure like this, and
as of SQL Server 2008, it will never be caught by system dependency checking:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;table style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;" bgcolor="#eeeeee" cellpadding="12" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;PROCEDURE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;GetFooBar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; &lt;span style="color:blue;"&gt;NOCOUNT&lt;/span&gt;
&lt;span style="color:blue;"&gt;ON&lt;/span&gt;&lt;span&gt;;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'SELECT bar FROM dbo.foo'&lt;/span&gt;&lt;span style="color:gray;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;In this case, you are pretty much on your own to ensure that
you reference valid objects.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Nothing
native in SQL Server will inspect this code for you, and surely there are ways
you can write dynamic SQL that will prevent your own parsing routines or third
party applications from getting the information correctly and reliably (for
example, in many cases, dynamic SQL is used when you are passing in table or
database names, so they could only be parsed at runtime anyway).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;What do people do now
to find dependencies not reported by &lt;span&gt;sysdepends&lt;/span&gt;?&lt;/font&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Manual Parsing&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;In addition to the information that they get from &lt;span&gt;sysdepends&lt;/span&gt;, parsing is also often the route of choice for
local dependency tracking, however this can be unreliable as well.&lt;span&gt;&amp;nbsp; &lt;/span&gt;For example, let's assume I &lt;span&gt;are&lt;/span&gt; looking for references to '%&lt;span&gt;dbo.table_name&lt;/span&gt;%',
and I search the &lt;span&gt;object_definition&lt;/span&gt; of all of your
objects for this text.&lt;span&gt;&amp;nbsp; &lt;/span&gt;A few of cases
where I will get incorrect results:&lt;/p&gt;

&lt;p class="MsoListParagraphCxSpFirst" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span&gt;&lt;span&gt;1)&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;dynamic SQL that interrupts the name, e.g.
EXEC('SELECT * FROM &lt;span&gt;dbo.table&lt;/span&gt;' + '_name');&lt;br&gt;
&lt;/p&gt;

&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span&gt;&lt;span&gt;2)&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;dynamic SQL that uses passed object names, e.g.
EXEC('SELECT * FROM ' + @table);&lt;br&gt;
&lt;/p&gt;

&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span&gt;&lt;span&gt;3)&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;poor&lt;/span&gt; but accepted
format, e.g. SELECT * FROM &lt;span&gt;dbo&lt;/span&gt; . &lt;span&gt;table_name&lt;/span&gt;;
and,&lt;br&gt;
&lt;/p&gt;

&lt;p class="MsoListParagraphCxSpLast" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span&gt;&lt;span&gt;4)&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;false&lt;/span&gt; positives, e.g.
SELECT * FROM dbo.table_name_2.&lt;/p&gt;

&lt;p&gt;So, parsing the definitions of all of your SQL modules will
get you a little bit closer, but is still only a small part of the picture.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you want to see a very thorough T-SQL
parsing routine, that not only finds many missing dependencies, but also
generates a script for the objects in correct dependency order, see this article
in SQL Server Magazine by &lt;span&gt;Omri&lt;/span&gt; &lt;span&gt;Bahat&lt;/span&gt;:&lt;/p&gt;

&lt;p style="margin-left:0.5in;"&gt;&lt;i&gt;A
Dependency Checker You Can &lt;span&gt;Depend&lt;/span&gt; On&lt;/i&gt;&lt;br&gt;
&lt;a target="_blank" href="http://www.sqlmag.com/Article/ArticleID/95428/sql_server_95428.html"&gt;http://www.sqlmag.com/Article/ArticleID/95428/sql_server_95428.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;br&gt;Third Party Tools&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;If you are not a do-it-yourself kind of DBA, there are
several tools available that will do a slightly better job than SQL Server will
do natively.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Ironically, though, some of
the 3&lt;sup&gt;rd&lt;/sup&gt; party tools designed to compensate for SQL Server's
weaknesses get much of their information from these same tables.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The two that seem to receive the best praise
are made by &lt;span&gt;ApexSQL&lt;/span&gt; and &lt;span&gt;RedGate&lt;/span&gt;.&lt;/p&gt;

&lt;p style="margin-left:0.5in;"&gt;&lt;span&gt;&lt;i&gt;ApexSQL&lt;/i&gt;&lt;/span&gt;&lt;i&gt; Doc&lt;/i&gt;&lt;br&gt;
&lt;a target="_blank" href="http://www.apexsql.com/sql_tools_doc.asp"&gt;http://www.apexsql.com/sql_tools_doc.asp&lt;/a&gt;&lt;/p&gt;

&lt;p style="margin-left:0.5in;"&gt;&lt;i&gt;Red-Gate
SQL Dependency Tracker&lt;/i&gt;&lt;br&gt;
&lt;a target="_blank" href="http://www.red-gate.com/products/SQL_Dependency_Tracker/index.htm"&gt;http://www.red-gate.com/products/SQL_Dependency_Tracker/index.htm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;New capabilities in
SQL Server 2008&lt;/font&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In SQL Server 2008, there is a new catalog view, called &lt;span&gt;sys.sql_expression_dependencies&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Before I begin, I will tell you first that,
while this view is better at solving a few of the problems outlined earlier, it
is not the answer to dependency problems.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;For example, it will store the name of a table referenced in a stored
procedure, even if that table does not exist yet.&lt;span&gt;&amp;nbsp; &lt;/span&gt;And when the table is created, this view will
be updated with the correct &lt;span&gt;referenced_object_id&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;However, &lt;span&gt;sysdepends&lt;/span&gt;
is still out of date; for this, you still need to manually run &lt;span&gt;sp_refreshsqlmodule&lt;/span&gt; against the stored procedure(s) that
reference the table.&lt;/p&gt;

&lt;p&gt;Note: when using SQL Server 2008's new feature in SQL Server Management Studio,
IntelliSense, to write stored procedures against a SQL Server 2008 database,
unintentional deferred name resolution is going to be less of a problem.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is because invalid objects will be
highlighted with a red squiggly line:&lt;br&gt;&lt;br&gt;&lt;img title="Squigglies!" alt="Squigglies!" width="396" border="1" height="48" src="http://www.aaronbertrand.com/voodoo/dep_squiggly.gif"&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Another great feature of &lt;span&gt;sys.sql_expression_dependencies&lt;/span&gt;
that is an improvement over &lt;span&gt;sysdepends&lt;/span&gt; and &lt;span&gt;sys.sql_dependencies&lt;/span&gt; is that it will also store the names
of references to three- or four-part names, so you can now get a list of
dependency objects to check, without having to parse the contents of each
module.&lt;span&gt;&amp;nbsp; &lt;/span&gt;And while deferred name
resolution will allow a procedure to be created even though it references a
non-existent object in a different database on the same instance, it will not
allow this for an object on a linked server; the only problems you will find
with objects found on a linked server are that the server is down or otherwise
unreachable, or the referenced object has been dropped, moved or renamed since
the dependency information was recorded.&lt;/p&gt;

&lt;p&gt;There are also two new dynamic management functions, called &lt;span&gt;sys.dm_sql_referenced_entities&lt;/span&gt; and &lt;span&gt;sys.dm_sql_referencing_entities&lt;/span&gt;,
which will parse referenced or referencing objects for dependencies on demand,
instead of looking them up statically in &lt;span&gt;sysdepends&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;There are problems with this too, though; in
the case of deferred name resolution, the views generate errors if you
reference a column explicitly in a table that does not yet exist.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Here is an example:&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;table style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;" bgcolor="#eeeeee" cellpadding="12" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;USE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; tempdb&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;foo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;&lt;br&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bar &lt;span style="color:blue;"&gt;INT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;&lt;br&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;PROCEDURE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;GetFooBar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; &lt;span style="color:blue;"&gt;NOCOUNT&lt;/span&gt;
&lt;span style="color:blue;"&gt;ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;

&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; bar &lt;span style="color:blue;"&gt;FROM&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;foo&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;SELECT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:gray;"&gt;*&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM&lt;/span&gt; &lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_sql_referenced_entities&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'dbo.GetFooBar'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'OBJECT'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;EXEC&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:maroon;"&gt;sp_rename&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;'dbo.foo.bar'&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'blat'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'COLUMN'&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;SELECT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:gray;"&gt;*&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM&lt;/span&gt; &lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_sql_referenced_entities&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'dbo.GetFooBar'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'OBJECT'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;DROP&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;PROCEDURE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;GetFooBar&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;DROP&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;foo&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The result of the second call to the function:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;font size="2" color="#cc0000" face="courier new,courier"&gt;Msg 207, Level 16, State 1, Procedure GetFooBar, Line 6&lt;br&gt;Invalid column name 'bar'.&lt;br&gt;Msg 2020, Level 16, State 1, Line 1&lt;br&gt;The dependencies reported for entity "dbo.GetFooBar" do not include references to columns. This is either because the entity references an object that does not exist or because of an error in one or more statements in the entity.&amp;nbsp; Before rerunning the query, ensure that there are no errors in the entity and that all objects referenced by the entity exist.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Fellow SQL Server MVPs Simon Sabin and Louis Davidson filed
bugs about this on Connect:&lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=331830"&gt;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=331830&lt;/a&gt;&lt;br&gt;
&lt;a target="_blank" href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=350776"&gt;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=350776&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;The Next Step&lt;/font&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;While SQL Server 2008 definitely gives us a better
dependency story, we still do not have a foolproof method.&lt;span&gt;&amp;nbsp; &lt;/span&gt;My aim here is to give you a more automated
way to compensate for some of these deficiencies. &lt;span&gt;&amp;nbsp;&lt;/span&gt;With that said, I am going to restrict the
discussion to tracking object dependencies (not column dependencies) within a
single SQL Server instance.&lt;span&gt;&amp;nbsp; &lt;/span&gt;With a
little bit of code, I will help reduce the amount of time you spend tracking
down this dependency information.&lt;/p&gt;

&lt;p&gt;The main problem with the missing dependency information is
that, in order to restore the information in &lt;span&gt;sysdepends&lt;/span&gt;
(which various tools rely on), you need to manually call &lt;span&gt;sys.sp_refreshsqlmodule&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;But why does that need to be the case?&lt;span&gt;&amp;nbsp; &lt;/span&gt;As I was researching the new dependency
objects earlier in the SQL Server 2008 beta cycle, I thought to myself,
"There has to be a better way."&lt;span&gt;&amp;nbsp;
&lt;/span&gt;It did not take long for me to come up with one; in fact, it took longer
to write the first prototype.&lt;/p&gt;

&lt;p&gt;My idea here is to create a DDL trigger that refreshes any
SQL modules for which rows are found in &lt;span&gt;sql_expression_dependencies&lt;/span&gt;
and are without a match in &lt;span&gt;sysdepends&lt;/span&gt;. The goal is to
do as much as we can to help the system repair itself when a DDL event leaves
an orphaned reference, and when it cannot fix itself, it can at least tell us
it uncovered a problem ... either through a custom log, raising a SQL Server
error, sending an e-mail, etc.&lt;span&gt;&amp;nbsp; &lt;/span&gt;With a
custom logging solution you can prevent the same error from notifying you too
often.&lt;/p&gt;

&lt;p&gt;This will catch pairs of actions that have been completed,
such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;drop a table and re-create it;&lt;/li&gt;

&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;alter a procedure to point to a new name or a
new schema, and then change the object; or,&lt;/li&gt;

&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;create&lt;/span&gt; a stored
procedure that references an invalid object, and then create the object.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;However, if you have something that is still incomplete, for
example if you change a module to point to an invalid object and have not yet
created that object, or if a referenced object in another database has since
been dropped, the only thing the DDL trigger can do is write a log entry and/or
alert you, since the dependency information cannot be corrected without further
action.&lt;/p&gt;

&lt;p&gt;Why search for all objects?&lt;span&gt;&amp;nbsp;
&lt;/span&gt;You could write the trigger in such a way that it limits the search to
the object that caused the DDL trigger to fire, but if you perform a global
search, you can also be sure to catch changes that happened while the DDL
trigger was disabled (which is often performed during deployments, either
manually or by schema comparison / synchronization tools). &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;You could do something similar in SQL Server 2005, using a
DDL trigger, and blindly execute &lt;span&gt;sp_refreshsqlmodule&lt;/span&gt;
for every object in the entire database.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;But, this would not be very efficient, and would miss something that DDL
triggers can capture in SQL Server 2008: &lt;span&gt;sp_rename&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;So, in SQL Server 2008, we can find the
missing dependencies using &lt;span&gt;sys.sql_expression_dependencies&lt;/span&gt;,
and we can also capture renames, making the solution better targeted and a
little more complete.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The following DDL trigger and stored procedure will refresh any &lt;span&gt;sql&lt;/span&gt; module that is found with a valid reference in &lt;span&gt;sys.sql_dependencies&lt;/span&gt;, but without a match in &lt;span&gt;sysdepends, whenever any of the defined DDL events occurred&lt;/span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It will
also log or alert you if it finds any references that do not exist, whether
they are in the current database or in another database on the server.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I have moved much of the logic to a stored
procedure, so you can call it on demand as well; you should also change the logic to log to a table or send an e-mail in relevant cases, because this demonstration assumes that the one who is performing the DDL actions (you) is also the one who wants to know about any dependency problems those DDL actions might be leaving behind.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;table style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;" bgcolor="#eeeeee" cellpadding="12" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;PROCEDURE&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;RefreshSysDepends&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; &lt;span style="color:blue;"&gt;NOCOUNT&lt;/span&gt;
&lt;span style="color:blue;"&gt;ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@referencing_id&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;INT&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@ref_db_name&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;255&lt;span style="color:gray;"&gt;),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@object_name&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;771&lt;span style="color:gray;"&gt;),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@referenced_id&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;INT&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@sql&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;600&lt;span style="color:gray;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE&lt;/span&gt; c &lt;span style="color:blue;"&gt;CURSOR&lt;/span&gt; &lt;span style="color:blue;"&gt;LOCAL STATIC READ_ONLY&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;FORWARD_ONLY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;FOR&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referencing_id&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_database_name&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:fuchsia;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_database_name
&lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;''&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_schema_name &lt;span style="color:gray;"&gt;+&lt;/span&gt;
&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;''&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt; ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_entity_name&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;FROM&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;sql_expression_dependencies&lt;/span&gt;
ed&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;LEFT&lt;/span&gt; &lt;span style="color:gray;"&gt;OUTER&lt;/span&gt; &lt;span style="color:gray;"&gt;JOIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;sysdepends&lt;/span&gt; sd&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;ON&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referencing_id &lt;span style="color:gray;"&gt;=&lt;/span&gt; sd&lt;span style="color:gray;"&gt;.&lt;/span&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND&lt;/span&gt; ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_id &lt;span style="color:gray;"&gt;=&lt;/span&gt; sd&lt;span style="color:gray;"&gt;.&lt;/span&gt;depid&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sd&lt;span style="color:gray;"&gt;.&lt;/span&gt;id &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND&lt;/span&gt; ed&lt;span style="color:gray;"&gt;.&lt;/span&gt;referenced_server_name &lt;span style="color:gray;"&gt;IS&lt;/span&gt;
&lt;span style="color:gray;"&gt;NULL;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;OPEN&lt;/span&gt; c&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH&lt;/span&gt; &lt;span style="color:blue;"&gt;NEXT&lt;/span&gt;
&lt;span style="color:blue;"&gt;FROM&lt;/span&gt; c &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
@referencing_id&lt;span style="color:gray;"&gt;,&lt;/span&gt; @ref_db_name&lt;span style="color:gray;"&gt;,&lt;/span&gt; @object_name&lt;span style="color:gray;"&gt;,&lt;/span&gt;
@referenced_id&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; 0&lt;span style="color:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;IF&lt;/span&gt; @referenced_id &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;OR&lt;/span&gt; @ref_db_name &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;IF&lt;/span&gt; @referenced_id &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;AND&lt;/span&gt; @ref_db_name &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;AND&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@object_name&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_SCHEMA_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;'.'&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;
&lt;span style="color:red;"&gt;' references '&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt;
@object_name &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;' ('&lt;/span&gt;
&lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referenced_id&lt;span style="color:gray;"&gt;,&lt;/span&gt; 0&lt;span style="color:gray;"&gt;))&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;'),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;which
doesn''t exist.'&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;IF&lt;/span&gt; @ref_db_name &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;AND&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@object_name&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_SCHEMA_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;'.'&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;
&lt;span style="color:red;"&gt;' might have a cross db dependency problem with '&lt;/span&gt;
&lt;span style="color:gray;"&gt;+&lt;/span&gt; @object_name &lt;span style="color:gray;"&gt;+&lt;/span&gt;
&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; @sql &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;'EXEC
sys.sp_refreshsqlmodule N'''&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;OBJECT_SCHEMA_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;))&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;'.'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@referencing_id&lt;span style="color:gray;"&gt;))&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt; &lt;span style="color:red;"&gt;''''&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC&lt;/span&gt; &lt;span style="color:maroon;"&gt;sp_executesql&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;@sql&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;-- you can also log the
calls you make here&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;-- by storing @sql in a
table along with &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;-- event time, user
information etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:red;"&gt;'Executed SQL = '&lt;/span&gt; &lt;span style="color:gray;"&gt;+&lt;/span&gt;
@sql&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;br&gt;&lt;/o:p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH&lt;/span&gt; &lt;span style="color:blue;"&gt;NEXT&lt;/span&gt; &lt;span style="color:blue;"&gt;FROM&lt;/span&gt; c &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; @referencing_id&lt;span style="color:gray;"&gt;,&lt;/span&gt;
@ref_db_name&lt;span style="color:gray;"&gt;,&lt;/span&gt; @object_name&lt;span style="color:gray;"&gt;,&lt;/span&gt; @referenced_id&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;CLOSE&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:'Courier New';"&gt;&amp;nbsp;c&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; DEALLOCATE&lt;/span&gt; c&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;font class="Apple-style-span" color="#0000ff" face="'Courier New'"&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TRIGGER&lt;/span&gt; DDL_Catcher &lt;span style="color:blue;"&gt;ON&lt;/span&gt;
&lt;span style="color:blue;"&gt;DATABASE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;FOR&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE_TABLE&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ALTER_TABLE&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DROP_TABLE&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE_PROCEDURE&lt;span style="color:gray;"&gt;,&lt;/span&gt;
ALTER_PROCEDURE&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;DROP_PROCEDURE&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE_FUNCTION&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;ALTER_FUNCTION&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DROP_FUNCTION&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE_TRIGGER&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ALTER_TRIGGER&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DROP_TRIGGER&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE_VIEW&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ALTER_VIEW&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DROP_VIEW&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ALTER_SCHEMA&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RENAME&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;/* &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RENAME is new in SQL Server
2008.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try this in SQL Server 2005, you
will get:&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Msg 1084, Level 15, State 1,
Procedure DDL_Catcher, Line 8&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;'RENAME' is an invalid event type.&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; &lt;span style="color:blue;"&gt;NOCOUNT&lt;/span&gt;
&lt;span style="color:blue;"&gt;ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;&lt;o:p&gt;&lt;br&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;-- you can log this somewhere for
later review, or you&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;-- can just comment it out:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:red;"&gt;N'Fired
for '&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;EVENTDATA&lt;/span&gt;&lt;span style="color:gray;"&gt;().&lt;/span&gt;value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;'NVARCHAR(MAX)'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC&lt;/span&gt; dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;RefreshSysDepends&lt;span style="color:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;You can set up a different monitor to validate the entries
in &lt;span&gt;sys.sql_expression_dependencies&lt;/span&gt; that reference
another server, and in addition, you can check which objects in another
database are depended upon but which may have been dropped since the last time
the local DDL trigger fired.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If the
local database is relatively stable, changes in the other database might have
occurred which break your local dependencies, but there is not an easy way to
do this, unless you want to create a server-wide trigger, or have certain
databases use DDL triggers that check on each others' dependency views.&lt;/p&gt;

&lt;p&gt;Having said that, I guess it could just as easily be a
scheduled job, but again, I guess it depends on how often you want it to run,
compared to how often you expect changes to be made to the local database, and
compared still to how likely you expect it to find anything that needs to be
fixed.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you make DDL changes once a
month, it doesn't make much sense to run this every five minutes.&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;Limitations&lt;/font&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;As I said before, the solution is far from perfect, and is only meant to get you a step closer to the "holy grail" of dependency tracking.&amp;nbsp; &lt;br&gt;&lt;br&gt;Note that we still cannot do anything about dynamic SQL,
since &lt;span&gt;sys.sql_expression_dependencies&lt;/span&gt; does not
capture information that it doesn't parse correctly.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is why you may still need to rely on
parsing and proper coding practices.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If
you can't rely on these, you may be down to grunt work.&lt;/p&gt;

&lt;p&gt;Another case that is not easy to handle just yet is the case
of the dropped column.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Fellow SQL Server
MVP Alex &lt;span&gt;Kuznetsov&lt;/span&gt; filed a bug about this in the
following feedback item, but the issue was incorrectly closed as fixed:&lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=352577"&gt;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=352577&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;And finally, a case that I am not treating here is #temp
table dependencies, which can cause problems for dependency tracking as
well.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;Erland&lt;/span&gt;
has some advice in &lt;a title="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sqlserver.programming&amp;amp;tid=2f89102b-32b0-4233-b2aa-32d0dc509060&amp;amp;cat=en_US_e348a19d-cdf4-4093-8f85-64418c10f6c5&amp;amp;lang=en&amp;amp;cr=US&amp;amp;sloc=" target="_blank" href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sqlserver.programming&amp;amp;tid=2f89102b-32b0-4233-b2aa-32d0dc509060&amp;amp;cat=en_US_e348a19d-cdf4-4093-8f85-64418c10f6c5&amp;amp;lang=en&amp;amp;cr=US&amp;amp;sloc="&gt;this thread&lt;/a&gt;&lt;a title="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sqlserver.programming&amp;amp;tid=2f89102b-32b0-4233-b2aa-32d0dc509060&amp;amp;cat=en_US_e348a19d-cdf4-4093-8f85-64418c10f6c5&amp;amp;lang=en&amp;amp;cr=US&amp;amp;sloc=" target="_blank" href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sqlserver.programming&amp;amp;tid=2f89102b-32b0-4233-b2aa-32d0dc509060&amp;amp;cat=en_US_e348a19d-cdf4-4093-8f85-64418c10f6c5&amp;amp;lang=en&amp;amp;cr=US&amp;amp;sloc="&gt;&lt;/a&gt;
about how to deal with this issue, but you are probably not going to be too
eager to try to implement it…&lt;/p&gt;</description></item></channel></rss>