Có cách nào tôi có thể tìm thấy thủ tục được lưu trữ trong SQL Server Management Studio theo tên hoặc một phần của tên không? (trên ngữ cảnh cơ sở dữ liệu đang hoạt động)
Cảm ơn vì sự giúp đỡ
Câu trả lời:
Bạn có thể dùng:
select *
from
sys.procedures
where
name like '%name_of_proc%'
nếu bạn cần mã, bạn có thể xem trong bảng syscomments
select text
from
syscomments c
inner join sys.procedures p on p.object_id = c.object_id
where
p.name like '%name_of_proc%'
Chỉnh sửa Cập nhật:
bạn cũng có thể sử dụng phiên bản tiêu chuẩn ansi
SELECT *
FROM
INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_NAME LIKE '%name_of_proc%'
inner join sys.procedures p on p.object_id = c.id
thay
object_definition(object_id(r.ROUTINE_NAME)),
thay thế nó là một vấn đề.
Giả sử bạn đang ở trong Object Explorer Details ( F7) hiển thị danh sách các Thủ tục được Lưu trữ, hãy nhấp vào nút Bộ lọc và nhập tên (hoặc một phần tên).
Điều này cũng sẽ hoạt động đối với các bảng và chế độ xem (trong số những thứ khác), không chỉ các mầm:
SELECT
'[' + s.name + '].[' + o.Name + ']',
o.type_desc
FROM
sys.objects o
JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
o.name = 'CreateAllTheThings' -- if you are certain of the exact name
OR o.name LIKE '%CreateAllThe%' -- if you are not so certain
Nó cũng cung cấp cho bạn tên lược đồ sẽ hữu ích trong bất kỳ cơ sở dữ liệu không tầm thường nào (ví dụ: cơ sở dữ liệu mà bạn cần truy vấn để tìm một thủ tục được lưu trữ theo tên).
Bạn có thể sử dụng truy vấn này:
SELECT
ROUTINE_CATALOG AS DatabaseName ,
ROUTINE_SCHEMA AS SchemaName,
SPECIFIC_NAME AS SPName ,
ROUTINE_DEFINITION AS SPBody ,
CREATED AS CreatedDate,
LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
(ROUTINE_DEFINITION LIKE '%%')
AND
(ROUTINE_TYPE='PROCEDURE')
AND
(SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')
Như bạn thấy, bạn cũng có thể thực hiện tìm kiếm bên trong phần thân của Stored Procedure.
Một mẹo rất nhỏ mà tôi tình cờ gặp phải khi thử một số SQL injection, trong trình khám phá đối tượng trong hộp tìm kiếm, chỉ cần sử dụng các ký tự phần trăm của bạn và điều này sẽ tìm kiếm MỌI THỨ các thủ tục, hàm, chế độ xem, bảng, lược đồ, chỉ mục được lưu trữ ... Tôi mệt mỏi khi nghĩ thêm :)
Khi tôi có tên Thủ tục lưu trữ và không biết nó thuộc về cơ sở dữ liệu nào, tôi sử dụng như sau:
Use [master]
GO
DECLARE @dbname VARCHAR(50)
DECLARE @statement NVARCHAR(max)
DECLARE db_cursor CURSOR
LOCAL FAST_FORWARD
FOR
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @statement = 'SELECT * FROM ['+@dbname+'].INFORMATION_SCHEMA.ROUTINES WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement
EXEC sp_executesql @statement
FETCH NEXT FROM db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor
Đối với SQL Server phiên bản 9.0 (2005), bạn có thể sử dụng mã bên dưới:
select *
from
syscomments c
inner join sys.procedures p on p.object_id = c.id
where
p.name like '%usp_ConnectionsCount%';
Tùy chọn 1: Trong SSMS, truy cập View > Object Explorer Details
hoặc nhấn F7. Sử dụng Search
hộp. Cuối cùng trong danh sách hiển thị nhấp chuột phải và chọn Synchronize
để tìm đối tượng trong Object Explorer
cây.
Tùy chọn 2: Cài đặt Tiện ích bổ sung giống như dbForge Search
. Nhấp chuột phải vào danh sách hiển thị và chọn Find in Object Explorer
.