Тип хранимой процедуры SQL Server: Вставить, Удалить, Обновить или Выбрать - PullRequest
0 голосов
/ 05 ноября 2018

Я делаю несколько запросов на SQL Server 2012 на sys.procedures, где я могу видеть все свои хранимые процедуры из своей базы данных.

SELECT * FROM SYS.PROCEDURES

Я нашел какое-то определение на

SELECT * FROM SYS.SQL_MODULES

Есть ли в таблицах sys какой-либо столбец или что-то, что говорит мне, является ли хранимая процедура типом: выбрать, вставить, удалить или обновить?

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Чтобы ответить на ваш вопрос НЕТ, нет 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
0 голосов
/ 05 ноября 2018

В метаданных нет ничего, что бы указывало на то, что делает хранимая процедура. Хранимые процедуры не имеют «типа», одна хранимая процедура может вставлять, обновлять, удалять и выбирать много раз в одной и той же процедуре

Если вас интересует что-то в этом духе, я предлагаю назвать процедуры для включения метаданных, например InsertSalesRecord или DeleteMonthlyInventory

0 голосов
/ 05 ноября 2018

Нет. Хранимая процедура может содержать много операторов вставки, обновления, удаления или выбора. Можно даже добавить два числа без какой-либо операции с базой данных.

0 голосов
/ 05 ноября 2018

Не столбец. Поскольку ваша процедура может делать все эти вещи, не стоит пытаться найти столбец, который удовлетворяет эту потребность. Но вы можете поместить эти критерии в предложение 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%';
...