Ищите инструмент, который может вернуть SP, делающие DML на таблице в SQL Server 2008 - PullRequest
1 голос
/ 27 мая 2010

Я работаю над большим приложением на SQL Server 2008 с 60 000 хранимых процедур и более 10 000 таблиц. Есть ли инструмент, с помощью которого я могу провести анализ влияния, чтобы выяснить, все ли SP выполняют DML на столе?

Ответы [ 4 ]

4 голосов
/ 27 мая 2010

Попробуйте Поиск SQL , от Red Gate (это бесплатно).

2 голосов
/ 03 февраля 2011

или этот SQLDog ... также бесплатно

2 голосов
/ 27 мая 2010

Следующий SP позволит вам найти ключевое слово (например, INSERT) и вернуть все объекты, где ключевое слово существует в вашей базе данных, давая:

  • Имя объекта
  • Тип объекта
  • Полезная команда для просмотра текста объекта

Из-за технических сложностей с блоком кода мне пришлось его разделить. Но, создайте новую хранимую процедуру, добавьте 2 параметра:

@SearchStr varchar(100),
@RowsReturned int = NULL    OUT

А затем вставьте следующее:

    SELECT  DISTINCT USER_NAME(o.uid) + '.' + OBJECT_NAME(c.id) AS 'Object name',
        CASE 
            WHEN OBJECTPROPERTY(c.id, 'IsReplProc') = 1 
                THEN 'Replication stored procedure'
            WHEN OBJECTPROPERTY(c.id, 'IsExtendedProc') = 1 
                THEN 'Extended stored procedure'        
            WHEN OBJECTPROPERTY(c.id, 'IsProcedure') = 1 
                THEN 'Stored Procedure' 
            WHEN OBJECTPROPERTY(c.id, 'IsTrigger') = 1 
                THEN 'Trigger' 
            WHEN OBJECTPROPERTY(c.id, 'IsTableFunction') = 1 
                THEN 'Table-valued function' 
            WHEN OBJECTPROPERTY(c.id, 'IsScalarFunction') = 1 
                THEN 'Scalar-valued function'
            WHEN OBJECTPROPERTY(c.id, 'IsInlineFunction') = 1 
                THEN 'Inline function'  
        END AS 'Object type',
        'EXEC sp_helptext ''' + USER_NAME(o.uid) + '.' + OBJECT_NAME(c.id) + '''' AS 'Run this command to see the object text'
    FROM    syscomments c
        INNER JOIN
        sysobjects o
        ON c.id = o.id
    WHERE   c.text LIKE '%' + @SearchStr + '%'  AND
        encrypted = 0               AND
        (
        OBJECTPROPERTY(c.id, 'IsReplProc') = 1      OR
        OBJECTPROPERTY(c.id, 'IsExtendedProc') = 1  OR
        OBJECTPROPERTY(c.id, 'IsProcedure') = 1     OR
        OBJECTPROPERTY(c.id, 'IsTrigger') = 1       OR
        OBJECTPROPERTY(c.id, 'IsTableFunction') = 1 OR
        OBJECTPROPERTY(c.id, 'IsScalarFunction') = 1    OR
        OBJECTPROPERTY(c.id, 'IsInlineFunction') = 1    
        )
    ORDER BY    'Object type', 'Object name'
    SET @RowsReturned = @@ROWCOUNT
0 голосов
/ 22 ноября 2013

Существует еще один бесплатный инструмент для этого от ApexSQL. И хорошая статья "как сделать" в их блоге

http://solutioncenter.apexsql.com/quickly-search-for-sql-database-data-and-objects/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...