使用SQL Server - 有一种方法可以查询“创建视图”SQL

时间:2015-06-05 10:53:29

标签: sql-server

我想知道我的数据库中的任何数据库视图中是否正在使用某个表dbo.person。这个数据库中有很多视图。

我可以右键单击每个视图“脚本视图为 - >创建到”以查看用于构建此视图的SQL,但这将花费很长时间。

我想知道是否有办法查询所有这些“创建视图”脚本,看看是否有人提到我的表dbo.person

我希望这很清楚。

7 个答案:

答案 0 :(得分:1)

你可以尝试

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

您可能需要将WHERE更改为dbo.person或[Person]

答案 1 :(得分:1)

您可以在系统目录中查询视图(并使用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)等。这取决于你是否正在寻找一些准确无误的东西。时间,但有时可能会错过参考,或者您是否需要捕获所有可以带来额外结果的解决方案。

答案 2 :(得分:1)

有关SQL Server数据库对象定义的更详细字符串搜索,请参阅SQL Object Where Used List script

您可以简单地调用

exec SearchInObjectsText 'name'

它将返回文本" name"的程序,函数,视图等。使用

答案 3 :(得分:1)

我知道这并没有直接回答这个问题,但它满足了这个需求。我使用redgate中名为SQLSearch的第三方加载项。它是免费的,我不是雇员,所以这不是任何形式的“插件”。

答案 4 :(得分:0)

我通常使用此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

答案 5 :(得分:0)

请查询Information_Schema.View_Table系统视图

select * from INFORMATION_SCHEMA.VIEW_TABLE_USAGE where TABLE_NAME = 'Emp'

答案 6 :(得分:0)

试试这个

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'