Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:Sprawdź referencje podczas zmiany sygnatur funkcji/procedur

Nie możesz dodać wyzwalacza do tabeli systemowej, ale możesz utworzyć wyzwalacz DDL, który będzie uruchamiany na instrukcji ALTER PROC - przykład:

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

Nie jestem pewien, jak uzyskać poprzednią listę parametrów lub czy jest to w ogóle możliwe - czy ktoś wie?

Zgadzam się z sugestią Charlesa, aby nowe parametry uczynić opcjonalnymi, jeśli to możliwe - istniejący kod nie ulegnie zepsuciu i musisz znaleźć referencje tylko wtedy, gdy musisz dodaj parametr do połączenia.

Skryptowanie bazy danych wydaje się długą drogą. Proste zapytanie, takie jak poniższe, powinno znaleźć wszystkie odniesienia do twojego proc (w twojej bazie danych):

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

To samo, ale będzie działać również w poprzednich wersjach serwera SQL:

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

Mam nadzieję, że to pomoże,

MDD



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niestandardowa kalkulacja kwoty

  2. Dołączanie tabel i schematów przy wyświetlaniu kolumn tożsamości w bazie danych SQL Server

  3. Jak korzystać z Projektanta zapytań w SQL Server

  4. Znajdź datę ostatniej modyfikacji/wdrożenia pakietu SSIS — SQL Server

  5. Konfiguracja replikacji transakcyjnej serwera SQL