我想知道某个表dbo.person
是否正在我的数据库的任何数据库视图中使用。这个数据库中有很多的意见。使用SQL Server - 有没有办法查询'创建视图'SQL
我可以右键单击每个视图“Script View as - > CREATE To”查看用于构建此视图的SQL,但这需要很长时间。
我想知道是否有任何方法来查询所有这些“创建视图为”脚本,看看他们中有没有提到我的表dbo.person
。
我希望这很清楚。
我想知道某个表dbo.person
是否正在我的数据库的任何数据库视图中使用。这个数据库中有很多的意见。使用SQL Server - 有没有办法查询'创建视图'SQL
我可以右键单击每个视图“Script View as - > CREATE To”查看用于构建此视图的SQL,但这需要很长时间。
我想知道是否有任何方法来查询所有这些“创建视图为”脚本,看看他们中有没有提到我的表dbo.person
。
我希望这很清楚。
您可以查询系统目录中的视图(并使用sql_modules
获取视图定义),然后使用系统视图sys.sql_expression_dependencies
发现其中的这些观点参考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;
有some small issues with sys.sql_expression_dependencies
,但我还是更倾向于使用这个比搜索'%person%'
,因为这可能带回10秒,或100秒额外的结果,任何时候一个包含人的表格(例如dbo.PersonAddress
)被引用,或者person
被用作别名(SELECT Forename + surname AS Person
)等等。这实际上取决于您是否在寻找某些在大多数情况下准确的事情,但有时可能会错过参考,或者您是否需要抓住所有的解决方案,将带来额外的结果。
我通常使用这个SQL查找定义。我没有在VIEWS
上过滤,以防在其他地方使用它。
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
你可以尝试
select * from INFORMATION_SCHEMA.VIEWS
where VIEW_DEFINITION like '%Person%'
您可能需要更改WHERE到dbo.person或[人]
请查询Information_Schema.View_Table系统视图
select * from INFORMATION_SCHEMA.VIEW_TABLE_USAGE where TABLE_NAME = 'Emp'
试试这个
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'
如需更详细的字符串搜索上的SQL Server数据库对象定义请参阅SQL Object Where Used List script
你可以简单地调用像
exec SearchInObjectsText 'name'
,它会返回程序,功能,视图等,其中使用文本“名称”
我知道这并不直接回答问题,但它回答了这个问题。我使用Redgate的第三方加载项SQLSearch。它是免费的,我不是员工,所以这不是任何形式的“插件”。