sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:verifique las referencias al modificar las firmas de funciones/procedimientos

No puede agregar un disparador a una tabla del sistema, pero puede crear un disparador DDL que se activará en la declaración ALTER PROC - ejemplo:

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

No estoy seguro de cómo obtener la lista de parámetros anterior o si es posible, ¿alguien lo sabe?

Estoy de acuerdo con la sugerencia de Charles de hacer que los nuevos parámetros sean opcionales si es posible:el código existente no se romperá y solo tiene que encontrar las referencias si debe agregue el parámetro a la llamada.

La creación de secuencias de comandos de la base de datos parece el camino más largo. Una consulta simple como la siguiente debería encontrar todas las referencias a su proceso (dentro de su base de datos):

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>%'

Esto es lo mismo, pero también funcionará en versiones anteriores del servidor SQL:

SELECT so.name, so.type
FROM syscomments sc
    JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'

Espero que esto ayude,

MDD