list of views referencing a table - sql-server

Is there any way to know if a particular table is being referenced by any Views or not.I used the below code which gives only SP's and function names:
select * from sys.objects p inner join sys.sql_modules m
on p.object_id = m.object_id
where m.definition like '%abc%'
Please help!!!

select *
from INFORMATION_SCHEMA.VIEWS
where VIEW_DEFINITION like '%abc%'

First, your query gives views in the result set (I tried it on AdentureWorks2012 -> Production.Product table):
If you're using SQL Server 2008 or above, you can use the sys.sql_expression_dependencies catalog view. For example:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc
FROM sys.sql_expression_dependencies sed
INNER JOIN sys.objects o
ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN sys.objects o1
ON sed.referenced_id = o1.[object_id]
WHERE referenced_entity_name = 'YourTable'
It will give you nice look on each by-name dependency on a user-defined entity
For column level dependencies you can use the sys.dm_sql_referenced_entities function
Hope this helps

If you need to find database objects (e.g. tables, columns, triggers) by name - have a look at the FREE Red-Gate tool called SQL Search which does this - it searches your entire database for any kind of string(s).
It's a great must-have tool for any DBA or database developer - did I already mention it's absolutely FREE to use for any kind of use??
If that doesn't fit your bill - you could also check out the sysdepends catalog view in SQL Server - it lists what objects depend on what (see details in the MSDN docs).
To find out what objects depend on a given table, you could use something like:
SELECT
id,
OBJECT_NAME(ID)
FROM sys.sysdepends
WHERE depid = OBJECT_ID('YourTable')
That should give you a list of all objects depending on that table (or view or whatever you're checking)

Related

How to Get list of views with underlying Tables along with their owner information

I would like to get the list of all views in a database with their underlying tables. The underlying tables can be from other databases. So, I would like to know the database names of those tables as well. So, can anyone please help?
I tried below things :
SELECT *
FROM [INFORMATION_SCHEMA].[VIEW_TABLE_USAGE]
But, it is not showing any database information of the tables.
I would also like know the owner information of those tables and views present in the database. So, can anyone please help?
Information on dependencies are available via the dependency functions and views
sys.sql_expression_dependencies
sys.dm_sql_referenced_entities
sys.dm_sql_referencing_entities
here's an example using the sys.sql_expression_dependencies:
SELECT DISTINCT
s.name AS view_schema_name,
v.name AS view_name,
dp.name AS [owner],
d.referenced_entity_name,
d.referenced_database_name,
d.referenced_server_name
FROM
sys.sql_expression_dependencies d
INNER JOIN
sys.views v ON d.referencing_id = v.object_id
INNER JOIN
sys.schemas s ON v.schema_id = s.schema_id
INNER JOIN
sys.database_principals dp ON s.principal_id = dp.principal_id
This query gets the tables for the views ([VIEW_CATALOG] is the db):
SELECT [VIEW_CATALOG] AS [database]
, *
FROM [INFORMATION_SCHEMA].[VIEW_TABLE_USAGE] AS [VIEW_TABLE_USAGE]
LEFT JOIN [sys].[tables] AS [tables]
ON [tables].[name] = [VIEW_TABLE_USAGE].[TABLE_NAME]
AND object_schema_name([tables].[object_id]) = [VIEW_TABLE_USAGE].[TABLE_SCHEMA];
This topic tells you how to get the owner information: List table names, owner, schema and columns in SQL server database

How to check a SQL Server view dependencies

I need to modify a SQL Server view in a large database and need to know what other objects in this database use this view. How can I do that?
I tried viewing dependencies in SQL Server Management Studio but that does not list the objects that depend on this view (I know of at least one stored procedure that depends on this view, and it is not listed as a dependency).
The other option that I considered is scripting the whole database and doing the text search in it, but I want to see if there is an automated way to do this.
Try to query syscomments table and find the usage.
select o.name,o.type from sys.syscomments c
inner join sys.objects o
on o. object_id = c.id
where c.text like '%your view name%'
Update #1
select o.name,o.type from sys.sql_modules m
inner join sys.objects o
on o.object_id = m.object_id
where m.definition like '%your view name%'

How to know which stored procedure has cross database query

I want to know which stored procedure has cross database/ linked server call.
I know i can do some kind string search with database name being string to search.
One of the example of it as below
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like '%{{DBNAME}}%';
but if possible then i do not want to go for string search so is there any other way to find all procedure which might have cross database/ linked server ?
There is a system view sys.sql_expression_dependencies that provides exactly this information:
select d.*
from sys.sql_expression_dependencies d
where d.referenced_database_name is not null
and d.is_ambiguous = 0;
Pay attention, however, that some of the references might be "fake", or rather not what you expect. For example, XML methods are also listed in it, which might cause some confusion.

Using SQL Server - is there a way to query 'Create view' SQL

I want to know if a certain table dbo.person is being used in any of the database views in my database. There are a lot of views in this database.
I could right click each view "Script View as --> CREATE To" to see the SQL that was used to build this view but this will take a long time.
I am wondering if there is any way to query all of these "create view as" scripts to see if any of them mention my table dbo.person.
I hope this is clear.
You can query the system catalog for views (and use sql_modules to get the view definition) then use the system view sys.sql_expression_dependencies to find which of these views reference dbo.Person:
SELECT ViewName = QUOTENAME(OBJECT_SCHEMA_NAME(v.[object_id])) + '.' + QUOTENAME(v.Name),
m.[Definition]
FROM sys.views AS v
INNER JOIN sys.sql_modules AS m
ON m.[object_id] = v.[object_id]
WHERE EXISTS
( SELECT 1
FROM sys.sql_expression_dependencies AS d
WHERE d.Referenced_id = OBJECT_ID(N'dbo.Person', 'U')
AND v.[object_id] = d.referencing_id
)
ORDER BY ViewName;
There are some small issues with sys.sql_expression_dependencies, but I would still be more inclined to use this than to search for '%person%', since this could bring back 10s, or 100s of extra results, any time a table that contains person (e.g. dbo.PersonAddress) is referenced, or person is used as an alias (SELECT Forename + surname AS Person) etc. It really depends whether you are looking for something that is going to be accurate most of the time, but may, on occasion miss a reference, or whether you need a catch all solution that will bring back extra results.
You could try
select * from INFORMATION_SCHEMA.VIEWS
where VIEW_DEFINITION like '%Person%'
You might need to change the WHERE to dbo.person or [Person]
For a more detailed string search on SQL Server database object definitions please refer to SQL Object Where Used List script
You can simply call like
exec SearchInObjectsText 'name'
and it will return procedures, functions, views, etc where the text "name" is used
I know this doesn't answer the question directly, but it answers the need. I use a third party add-in called SQLSearch from redgate. It's free and I'm not an employee, so this isn't a "plug" of any kind.
I normally use this SQL to look in definitions. I didn't filter on VIEWS just in case it is used somewhere else.
SELECT
so.name, so.type, sm.Definition
FROM
sys.objects AS so INNER JOIN sys.sql_modules AS sm ON so.object_id = sm.object_id
WHERE
sm.Definition LIKE N'%dbo.person%'
ORDER BY so.name
Please query Information_Schema.View_Table system views
select * from INFORMATION_SCHEMA.VIEW_TABLE_USAGE where TABLE_NAME = 'Emp'
Try this
SELECT DISTINCT m.definition, o.name AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o
ON m.object_id=o.object_id
WHERE m.definition Like '%person%'
and type_desc = 'VIEW'

Query to find Table objects dependent on a Table in SQL Server 2008

I searched online to find a solution to the aforementioned topic but failed to get something that works for me. I only want a SQL statement that will query a database and bring out tables that are dependent on a particular table. I tried the sp_depends approach but it only brought out stored procedures and check constraints in the result set but no tables.
I stumbled on sys.sql_expression_dependenciesbut I discovered it doesn't work for SQL Server 2008. Please I need some help to get this done.
Many thanks.
Simply we can do this In SQL server management studio Right-click on a table and choose 'View Dependencies'.
By using query
Select
S.[name] as 'Dependent_Tables'
From
sys.objects S inner join sys.sysreferences R
on S.object_id = R.rkeyid
Where
S.[type] = 'U' AND
R.fkeyid = OBJECT_ID('tablename')
Another method
SELECT DISTINCT name, so.type
FROM sys.objects AS so
INNER JOIN sys.sql_expression_dependencies AS sed
ON so.object_id = sed.referencing_id
WHERE sed.referenced_id = OBJECT_ID('[tablename]');
Second method selects Procedures, views too.
I found a way around it and I give the credit to Arunprasanth KV for giving a response that guided me to the solution. After studying the schema of the tables properly, the following query gave me exactly what I wanted:
Select
S.[name]
From
sys.objects S inner join sys.sysreferences R
on S.object_id = R.fkeyid
Where
S.[type] = 'U' AND
R.rkeyid = OBJECT_ID('TableName')
GO
Use dm_sql_referencing_entities system view which will give you objects dependent on the table
SELECT referencing_schema_name,
referencing_entity_name,
referencing_id,
referencing_class_desc
FROM sys.Dm_sql_referencing_entities ('schema.Tablename', 'OBJECT')

Resources