Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:Verifique as referências ao alterar as assinaturas de função/procedimento


Você não pode adicionar um gatilho a uma tabela do sistema, mas pode criar um gatilho DDL que será acionado na instrução ALTER PROC - exemplo:
ALTER TRIGGER DDL_PROC
ON DATABASE
FOR ALTER_PROCEDURE
AS
DECLARE @data XML, @ObjectName sysname, @ParamCount int
SET @data = EVENTDATA()
SET @ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')

PRINT 'You have changed procedure: ' + @ObjectName
SELECT @ParamCount = COUNT(*) FROM sys.parameters
WHERE object_id = OBJECT_ID(@ObjectName)
RAISERROR('This procedure now has %i parameter(s)',0,0,@ParamCount)
GO

Não tenho certeza de como obter a lista de parâmetros anterior ou se é possível - alguém sabe?

Eu concordo com a sugestão de Charles de tornar os novos parâmetros opcionais, se possível - o código existente não será interrompido e você só precisará encontrar as referências se precisar adicione o parâmetro à chamada.

A criação de scripts no banco de dados parece ser o caminho mais longo. Uma consulta simples como a seguinte deve encontrar todas as referências ao seu proc (dentro do seu banco de dados):
SELECT so.name, so.type_desc
FROM sys.all_objects so
    JOIN sys.all_sql_modules sm ON so.[object_id] = sm.[object_id]
WHERE sm.[definition] LIKE '%<proc name>%'

Isso é a mesma coisa, mas também funcionará em versões anteriores do SQL Server:
SELECT so.name, so.type
FROM syscomments sc
    JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'

Espero que isto ajude,

MDD