sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Zkontrolujte odkazy při změně podpisů funkcí/procedur

Spouštěč nelze přidat do systémové tabulky, ale můžete vytvořit spouštěč DDL, který se spustí v příkazu ALTER PROC - příklad:

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

Nejsem si jistý, jak získat předchozí seznam parametrů nebo jestli je to vůbec možné – ví to někdo?

Souhlasil bych s Charlesovým návrhem, aby byly nové parametry pokud možno nepovinné – stávající kód se nezlomí a reference musíte najít pouze v případě, že musíte přidejte parametr do volání.

Skriptování databáze vypadá jako dlouhá cesta. Jednoduchý dotaz, jako je následující, by měl najít všechny odkazy na váš proc (ve vaší databázi):

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 je totéž, ale bude fungovat i v předchozích verzích SQL serveru:

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

Doufám, že to pomůže,

MDD



  1. Jak změnit řetězec na datum během importu pomocí Sequel Pro?

  2. SQL:Kde mezi dvěma daty bez roku?

  3. Kam umístit závislost c3p0 v kontejneru Tomcat

  4. Vložte více řádků se stejným primárním klíčem do SQL pomocí php