Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:Проверете препратките, когато променяте сигнатури на функция/процедура

Не можете да добавите тригер към системна таблица, но можете да създадете DDL тригер, който ще задейства оператора ALTER PROC - пример:

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

Не съм сигурен как да получа предишния списък с параметри или дали изобщо е възможно - някой знае ли?

Бих се съгласил с предложението на Чарлз новите параметри да бъдат незадължителни, ако е възможно - съществуващият код няма да се повреди и трябва да намерите препратките само ако трябва добавете параметъра към повикването.

Скриптирането на базата данни изглежда като дълъг път. Проста заявка като следната трябва да намери всички препратки към вашата процедура (във вашата база данни):

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

Това е същото, но ще работи и в предишни версии на SQL сървъра:

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

Надявам се това да помогне,

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. Разделяне на низ чрез sql оператор (ip адрес)

  2. Как да пиша с помощта на BCP към отдалечен SQL сървър?

  3. Объркан относно реда за обработка на логическите заявки на Ицик Бен-Ган в неговата книга за SQL Server 2005 и книгата за SQL Server 2008

  4. Не може да се създаде низ за връзка за отдалечен работен плот за C# приложение

  5. Форматирайте телефонен номер в SQL Server (T-SQL)