存储过程中使用的临时表?

时间:2016-09-20 04:59:21

标签: sql-server tsql

我想知道在temporary中使用了多少stored procedure个表。

提前致谢

2 个答案:

答案 0 :(得分:1)

这是一个让你可以使用的算法:

  1. 从routine_definition列
  2. 获取Information_Schema.Routines中存储过程的文本

    Declare @Def VarChar(Max) = '' Select @Def = @Def + Routine_Definition From Information_Schema.Routines

    1. 按空格分隔例程文本(每行一个字)
    2. 阅读这个很棒的答案:

      Turning a Comma Separated string into individual rows

      1. 计算/显示以#
      2. 开头的所有不同单词

        事后1:

        现在,如果您有[#One Two Three][#One Two Three Four],它将仅显示为#One,因此您必须使用一些TSQL技巧来删除方括号之间的空格。

        事后2:

        您是否必须区分#Temp##Temp表?

答案 1 :(得分:0)

我真的不明白你为什么要这样做,但以下查询可能有所帮助。

这只计算出现在存储过程定义中的哈希数,该存储过程存储在系统视图'sys.sql_modules'中。

SELECT
    LEN(m.[definition]) - 
    LEN(REPLACE(m.[definition],'#','')) AS 'CountOf#Characters'
FROM
    sys.sql_modules m
    JOIN sys.procedures p
        ON m.[object_id] = p.[object_id]
WHERE
    p.[name] = 'Testing' -- <<the name of your stored procedure

当然,这假定该过程仅包含CREATE TABLE#Table1样式语句。如果使用哈希删除表或甚至在代码注释中使用哈希,则需要考虑包装替换函数。