【问题标题】:SQL Server stored procedure type: Insert, Delete, Update, or SelectSQL Server 存储过程类型:插入、删除、更新或选择
【发布时间】:2019-04-09 01:18:12
【问题描述】:

我正在sys.procedures 上对 SQL Server 2012 进行一些查询,在那里我可以看到我的数据库中的所有存储过程。

SELECT * FROM SYS.PROCEDURES

我找到了一些定义

SELECT * FROM SYS.SQL_MODULES

sys 表上是否有任何列,或者告诉我存储过程是否是一种类型:选择、插入、删除或更新?

【问题讨论】:

  • 否,因为单个存储过程可以根据非确定性条件完成所有这些事情或不做这些事情或其中一些事情。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

要回答您的问题 NO,没有 1 列可以让您知道正如其他人所提到的那样,但您可能可以使用类似这样的内容来给您一个粗略的想法……这又不是 100% 正确

select sm.definition,
CASE WHEN
    sm.definition like '%SELECT%' THEN 1 ELSE 0
    END AS 'HasSelect',
CASE WHEN
    sm.definition like '%Insert into%' THEN 1 ELSE 0
    END AS 'HasInsert',
    CASE WHEN
    sm.definition like '%UPDATE TABLE%' THEN 1 ELSE 0
    END AS 'HasUpdate',
    CASE WHEN
    sm.definition like '%DELETE FROM%' THEN 1 ELSE 0
    END AS 'HasDelete',
        CASE WHEN
    sm.definition like '%Drop%' THEN 1 ELSE 0
    END AS 'HasDrop'
FROM sys.procedures p
INNER JOIN sys.sql_modules sm
ON p.object_id = sm.object_id

【讨论】:

    【解决方案2】:

    不是列。因为您的程序可以完成所有这些事情,所以尝试提出一个满足该需求的列是没有用的。但是您可以将这些条件放入 WHERE 子句中。

    SELECT DISTINCT
           o.name AS Object_Name,
           o.type_desc
      FROM sys.sql_modules m
      JOIN sys.objects o ON m.object_id = o.object_id
     WHERE o.name Like '%INSERT%'
        OR o.name Like '%SELECT%';
    

    【讨论】:

      【解决方案3】:

      元数据中没有任何内容可以告诉您存储过程的作用。 存储过程没有“类型”,单个存储过程可以在同一个过程中多次插入、更新、删除和选择

      如果您对这些方面感兴趣,我建议您命名过程以包含元数据,例如 InsertSalesRecord 或 DeleteMonthlyInventory

      【讨论】:

        【解决方案4】:

        没有。一个存储过程可以包含许多插入、更新、删除或选择语句。它甚至可以只添加两个数字而无需任何数据库操作。

        【讨论】:

          猜你喜欢
          • 2019-08-10
          • 2013-11-07
          • 2021-09-25
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          • 2012-10-13
          • 1970-01-01
          相关资源
          最近更新 更多