Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server:Kiểm tra tham chiếu khi thay đổi chữ ký hàm / thủ tục

Bạn không thể thêm trình kích hoạt vào bảng hệ thống, nhưng bạn có thể tạo trình kích hoạt DDL sẽ kích hoạt trên câu lệnh ALTER PROC - ví dụ:

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

Tôi không chắc làm thế nào để lấy danh sách tham số trước đó hoặc nếu nó có thể - có ai biết không?

Tôi sẽ đồng ý với đề xuất của Charles để đặt các tham số mới là tùy chọn nếu có thể - mã hiện tại sẽ không bị hỏng và bạn chỉ phải tìm các tham chiếu nếu bạn phải thêm tham số vào cuộc gọi.

Viết kịch bản cho cơ sở dữ liệu có vẻ như là một chặng đường dài. Một truy vấn đơn giản như sau sẽ tìm thấy tất cả các tham chiếu đến proc của bạn (trong cơ sở dữ liệu của bạn):

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

Đây là điều tương tự, nhưng cũng sẽ hoạt động trong các phiên bản trước của máy chủ SQL:

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

Hy vọng điều này sẽ hữu ích,

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. Lỗi chuyển đổi dữ liệu tải hàng loạt (cắt ngắn)

  2. Tại sao truy vấn này chậm lần đầu tiên sau khi tôi bắt đầu dịch vụ?

  3. TSQL Msg 1013 Sử dụng tên tương quan để phân biệt chúng.

  4. Cách tạo Ràng buộc KIỂM TRA trong SQL Server (Ví dụ T-SQL)

  5. lỗi chuyển đổi varchar thành float