小编tbo*_*one的帖子

查找特定列的依赖项(现代方式,不使用 sysdepends)

我需要找到不仅使用某个表,而且使用表中特定列的所有视图和存储过程。

以下“似乎”有效,但有许多警告要小心使用此方法(由于各种原因不可靠,很快将被弃用等):

SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE 
    object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type
Run Code Online (Sandbox Code Playgroud)

一些经常被引用的替代方法是 sys.sql_dependencies 和 sys.sql_expression_dependencies,但它们都没有列级粒度。

有谁知道这样做的方法?(或者,即使您明确知道它实际上无法完成,知道它也会有所帮助。)

sql-server

15
推荐指数
1
解决办法
2万
查看次数

有没有办法确定 SQL Server 查询是在内存中运行还是在磁盘中运行?

我今天在一个应用程序中遇到了一组存储过程,它们在长时间运行的进程中被重复调用。在每个过程中,我发现了多个不同的 select 语句,其中一些在循环中;毫不奇怪,当前使用的这些例程需要几分钟才能运行,而直觉预计它们会在几秒钟内完成。

很明显,在编写这些程序时没有考虑性能,有多个实例只是“不是一个好主意”。

导入数据时处理每一行每行需要 300 毫秒,因此相对较小的导入需要几分钟来处理。

然而,程序中涉及的表格大部分都非常小。我在想,如果所有这些表都完全驻留在内存中,那么通过重写其中的任何一个,也许不会获得那么多。

我试图确定......对于这个明显效率低下的代码,它有多大的实际影响?值得修复吗?

所以问题是:
- 有没有办法确定哪些表完全固定在内存中?
- 有没有办法打开跟踪以监视嵌套存储过程以找到特别昂贵的部分?

注意:这是在 SQL Server 2008 R2 上

sql-server-2008 sql-server

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

sql-server ×2

sql-server-2008 ×1