No SQL Server, existe alguma maneira de verificar se a alteração do esquema terá impacto no Procs armazenado?

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

Pergunta

No SQL Server, existe alguma maneira de verificar se as alterações no esquema afetarão os procedimentos armazenados (e/ou visualizações)?
Por exemplo, uma alteração do nome da coluna em uma tabela, pode quebrar alguns procedimentos armazenados; Como verificar os Procs armazenados impactados?

Foi útil?

Solução

No SSMS (SQL Server Management Studio), clique com o botão direito do mouse no objeto que você está alterando e clique em Exibir dependências. Eu não acho que isso encontrará referências de outro banco de dados.

Você também pode procurar referências em procedimentos armazenados se eles não forem criptografados. Você teria que fazer isso em cada banco de dados que você suspeita que possa fazer referência ao objeto que está alterando.

Selecione Objects.name, sql_modules.Definition de sys.sql_modules sql_modules Junte -se a objetos sys.objects em sql_modules.object_id = objetos.object_id onde definição como '%algum nome da coluna%';

Não encontrei nada que seja 100,0000% preciso 100.000000% do tempo.

Outras dicas

tente usar:

EXEC sp_depends 'YourTableName'

e/ou

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

Seus arquivos CSS provavelmente foram malrados, então eu carregaria esses arquivos CSS para o novo servidor (assumindo que é um novo servidor)

Seus arquivos CSS podem ser localizados a partir de:

C: \ Arquivos de Programas \ Arquivos Comuns \ Microsoft Shared \ Web Server Extensões \ 14 \ Template \ Layouts \ 1033 \ Styles

Além disso,

    .
  1. é o seu farm de recuperação do WSS a mesma versão que o original?
  2. Como você recuperou (que método) seus bancos de dados do SharePoint / WSS?

A melhor maneira de pensar para fazer isso é abstrair seus procedimentos armazenados de suas tabelas reais usando visualizações e criar essas visualizações com uma cláusula "com esquemas", que deve impedir mudanças que quebrem suas opiniões ...

Ferramentas comerciais como Refactor SQL do Red Gate posso fazer isso.
Eu acho que a versão recente de Estúdio visual Inclua também esse tipo de recurso, mas eu não tentei.

Que eu saiba, não há recursos internos do Microsoft SQL Server per-se o que fará isso. Correção: Acabei de ler sobre sp_dende Na resposta de KM a este post ... observe que o uso de SP_Dendens está preso; é substituído por sys.dm_sql_referencing_entities e sys.dm_sql_referenced_entities

Além disso, se os procedimentos armazenados subjacentes usarem sql dinâmico, a tarefa de detectar dependências se torna mais difícil e propensa a "erros".

Se você deseja alterar o nome de um objeto ou coluna, então o Renomear inteligente Recurso do Red Gate's Software SQL Prompt 5 gerará um script que executa a renomeação e atualiza referências ao nome antigo em outros objetos.

Se você está apenas interessado no que depende do nome de uma coluna, o SQL Prompt 5 também tem um Dependências da coluna Função, onde pairando sobre o nome da coluna em um script aparece uma janela que contém uma lista de objetos que se referem à coluna.

Você pode baixar uma avaliação de 14 dias gratuitamente, para ver se um desses recursos funciona para você.

Paul Stephenson
Gerente de projeto prompt do SQL
Software Red Gate

Se você usar o SQL Server

Você pode usar esta consulta após sua alteração e encontrar procedimento ou visualização armazenada ou ...

que após sua mudança pode receber erro

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];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top