【问题标题】:Query to find out stored procedures using dynamic temp tables使用动态临时表查询以查找存储过程
【发布时间】:2017-10-13 18:02:56
【问题描述】:

假设我的数据库中有 10,000 个存储过程,每个存储过程有一千个 LOC。其中一些存储过程使用动态临时表。我想找出所有使用动态临时表的存储过程。

有人可以帮我完成这项任务的最优化查询吗?

【问题讨论】:

  • 你尝试了什么?
  • “动态临时表”到底是什么意思?
  • 动态临时表是指没有显式创建表时。另外,我的数据库是 SQL Sever 2012。

标签: stored-procedures sql-server-2016


【解决方案1】:

你可以这样开始:

SELECT s.name As schema_name, p.name as procedure_name
FROM sys.procedures p
INNER JOIN sys.schemas s
ON p.schema_id = s.schema_id
WHERE object_definition(object_id) like '%create table #%'

我很清楚你所说的“动态临时表”是什么意思,我也不确定性能,但这应该会给你一个包含文本 create table # 的所有存储过程的列表 - 这就是创建临时表。

See a live demo or rextester.

更新(再次)

既然您已经阐明了“动态临时表”的含义,您需要做的就是更改 where 子句中的条件:

SELECT s.name As schema_name, p.name as procedure_name
FROM sys.procedures p
INNER JOIN sys.schemas s
ON p.schema_id = s.schema_id
WHERE object_definition(object_id) like '%[^insert] into #%'

【讨论】:

  • 这不是创建动态临时表的方法。当我们给出表定义时,我们正在显式创建表。
  • 选择 txtVersion,txtLevel,txtParameters,txtParameterType,txtParametersDesc,当 flgPricePerUnitApplicable = 1 然后 '1' 否则 '0' 以 'flgPricePerUnitApplicable' 结束时的情况,txtLevelName 从 testowner.ProjectLTSMstPARAMETERS 到 #temp 与 (nolock)其中 flgLicenseParameter = 1 这是动态临时表创建示例,其中未定义临时表架构。
  • 然后将条件更改为%into #%...查看我编辑的答案。
  • 但这会给我那些 SP 也可以在其中执行各种插入操作。也可以进行简单的插入。
  • 只有那些插入到临时表中的。我确实有办法进一步缩小范围,会在几分钟内更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2020-09-24
相关资源
最近更新 更多