В SQL Server есть ли способ проверить, повлияет ли изменение схемы на хранимые Procs?

StackOverflow https://stackoverflow.com/questions/2526140

Вопрос

В SQL Server есть ли способ проверить, будут ли изменения в схеме влиять на сохраненные процедуры (и/или просмотры)?
Например, изменение имени столбца в одной таблице может сломать некоторые хранимые процедуры; Как проверить затронутые хранилища?

Это было полезно?

Решение

В SSMS (SQL Server Management Studio) щелкните правой кнопкой мыши на объект, который вы меняете, и нажмите «Зависимости». Я не думаю, что это найдет ссылки из другой базы данных.

Вы также можете искать ссылки в хранимых процедурах, если они не зашифрованы. Вам нужно было бы сделать это в каждой базе данных, которую, как вы подозреваете, может ссылаться на объект, который вы меняете.

выберите objects.name, sql_modules.definition от sys.sql_modules sql_modules inbos sys.objects объектов на sql_modules.object_id = objects.object_id, где определение, как «%name столбца%';

Я не нашел ничего, что на 100,0000% точное 100,000000% времени.

Другие советы

Попробуйте использовать:

EXEC sp_depends 'YourTableName'

и/или

DECLARE @Search nvarchar(500)
SET @Search='YourTableName' --or anything else
SELECT DISTINCT
    LEFT(o.name, 100) AS Object_Name,o.type_desc
    FROM sys.sql_modules        m 
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
    WHERE m.definition Like '%'+@Search+'%'
    ORDER BY 2,1

Ваши файлы CSS, вероятно, были запущены, поэтому я не перенес эти файлы CSS на новый сервер (предполагая, что это новый сервер)

Ваши файлы CSS могут быть расположены из:

c: \ Файлы программы \ Общие файлы \ Microsoft Shared \ Web Server Extensions \ 14 \ Шаблон \ layouts \ 1033 \ styles

также,

  1. - ваша ферма восстановления WSS такая же версия, как оригинал?
  2. Как вы восстановили (какой метод) ваши базы данных SharePoint / WSS?

Лучший способ подумать, чтобы сделать это, - это абстрагировать ваши сохраненные процедуры из ваших реальных таблиц, используя представления, и создать эти взгляды с помощью схемы с схемой », что должно предотвратить изменения, которые нарушат ваши взгляды ...

Коммерческие инструменты, такие как Рефактор SQL Red Gate может сделать это.
Я думаю, что недавняя версия Визуальная студия Также включайте такие функции, но я не пробовал.

Насколько мне известно, нет встроенных функций Microsoft SQL Server как таковой что сделает это. Коррекция: Я только что читаю о sp_depends В ответе КМ на этот пост ... Обратите внимание, что использование SP_Depends устарело; его заменено sys.dm_sql_referencing_entities а также sys.dm_sql_referenced_entities

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

Если вы хотите изменить имя объекта или столбца, то Умное переименование функция программного обеспечения Red Gate SQL Подсказка 5 будет генерировать скрипт, который выполняет переименование и обновляет ссылки на старое имя в других объектах.

Если вас просто заинтересованы в том, что зависит от имени столбца, то SQL RIPPT 5 также имеет Зависимости столбца Функция, где парят над именем столбца в скрипте, выявляет окно, содержащее список объектов, которые относятся к столбцу.

Вы можете бесплатно скачать 14-дневную пробную версию, чтобы увидеть, работает ли какая-либо из этих функций для вас.

Пол Стивенсон
SQL -оперативный менеджер проекта
Программное обеспечение Red Gate

Если вы используете SQL Server

Вы можете использовать этот запрос после изменения и найти сохраненную процедуру или представление или ...

что после вашего изменения может получить ошибку

USE <Your_DataBase_Name>;

SET NOCOUNT ON;

DECLARE @name NVARCHAR(MAX) 
DECLARE @sql NVARCHAR(MAX) 
DECLARE @type CHAR(2)
DECLARE @type_desc NVARCHAR(60)
DECLARE @params NVARCHAR(MAX)

DECLARE @tblInvalid TABLE
(
  [type_desc] NVARCHAR(60) ,
  [name] NVARCHAR(MAX) ,
  [error_number] INT ,
  [error_message] NVARCHAR(MAX) ,
  [type] CHAR(2)
);       

DECLARE testSPs CURSOR FAST_FORWARD
FOR
SELECT  [name] = OBJECT_NAME(SM.[object_id]) ,
        [type] = SO.[type] ,
        SO.[type_desc] ,
        [params] = ( SELECT (
                            SELECT  CONVERT(XML, ( SELECT STUFF(( SELECT
                                                          ', ' + [name]
                                                          + '=NULL' AS [text()]
                                                          FROM
                                                          sys.parameters
                                                          WHERE
                                                          [object_id] = SM.[object_id]
                                                          FOR
                                                          XML
                                                          PATH('')
                                                          ), 1, 1, '')
                                                 ))
                     FOR    XML RAW ,
                                TYPE
                 ).value('/row[1]', 'varchar(max)')
                   )
FROM    sys.sql_modules SM
        JOIN sys.objects SO ON SO.[object_id] = SM.[object_id]
WHERE   SO.[is_ms_shipped] = 0
        AND SO.[type] = 'P'


OPEN testSPs 
FETCH NEXT FROM testSPs INTO @name, @type, @type_desc, @params

WHILE ( @@FETCH_STATUS = 0 ) 
BEGIN
    BEGIN TRY
        SET @sql = 'SET FMTONLY ON; exec ' + @name + ' ' + @params
            + '; SET FMTONLY OFF;'
        --PRINT @sql;      
        EXEC (@sql);
    END TRY
    BEGIN CATCH
        PRINT @type_desc + ', ' + @name + ', Error: '
            + CAST(ERROR_NUMBER() AS VARCHAR) + ', ' + ERROR_MESSAGE();
        INSERT  INTO @tblInvalid
                SELECT  @type_desc ,
                        @name ,
                        ERROR_NUMBER() ,
                        ERROR_MESSAGE() ,
                        @type;
    END CATCH


    FETCH NEXT FROM testSPs INTO @name, @type, @type_desc, @params
END

CLOSE testSPs  
DEALLOCATE testSPs


SELECT  [type_desc] ,
    [name] ,
    [error_number] ,
    [error_message]
FROM    @tblInvalid
ORDER BY CHARINDEX([type], ' U V PK UQ F TR FN TF P SQ ') ,
    [name];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top