Có cách nào để truy vấn cơ sở dữ liệu và truy xuất danh sách tất cả các thủ tục được lưu trữ và tham số của chúng không?
Tôi đang sử dụng SQL Server 2000.Làm cách nào để có danh sách tất cả các thủ tục được lưu trữ và thông số của chúng bắt đầu bằng một tiền tố nhất định?
10
A
Trả lời
26
Để có được thông tin về các thủ tục lưu trữ:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
Để tìm sprocs bắt đầu với một tiền tố nhất định (ví dụ: "USP"):
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE 'usp%'
Để tìm tất cả thông số cho quy trình được lưu trữ:
SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME='YourSprocName'
Để tìm tất cả các thông số cho tất cả các thủ tục lưu trữ bắt đầu với một tiền tố nhất định:
SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME LIKE 'usp%'
4
thử cái này:
select o.name,p.name from sys.all_parameters p inner join sys.all_objects o on p.object_id = o.object_id
where o.type = 'P'
-1
truy vấn sau trả về thủ tục, chức năng và các bộ lọc bằng một tiền tố. Tôi không chắc chắn mặc dù, nếu nó sẽ làm việc trên máy chủ sql 2000. Tôi để nó ở đây tham chiếu anyway, bởi vì nó là một truy vấn hữu ích tốt.
SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
COALESCE(P.parameter_id,0) AS [ParameterID],
COALESCE(P.name, 'NO PARAMETER') AS [ParameterName],
COALESCE(TYPE_NAME(P.user_type_id),'') AS [ParameterDataType],
COALESCE(P.max_length,0) AS [ParameterMaxBytes],
COALESCE(P.is_output,0) AS [IsOutPutParameter]
FROM sys.objects AS SO
LEFT OUTER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN (SELECT OBJECT_ID
FROM sys.objects
WHERE TYPE IN ('P','FN'))
AND SO.NAME LIKE 'U%' --starting with a certain prefix
ORDER BY [Schema], SO.name, P.parameter_id
GO
1
Để hiển thị một danh sách của tất cả các thủ tục và các thông số của họ, nó sẽ là như thế này:
SELECT o.name AS [Procedure name], p.name as [Parameter name]
FROM sys.parameters p INNER JOIN sysobjects o ON p.object_id = o.id
WHERE o.name LIKE 'prefix%' AND o.xtype = 'P'
Nó hoạt động trong SQL Server 2016 nhưng tôi đoán nó hoạt động trong phiên bản cũ quá.
+1. Tuy nhiên, điều về tiền tố được yêu cầu. – AxelEckenberger
Tôi có nên thay đổi WHERE SPECIFIC_NAME = ... thành LIKE "MyTable_ *" không? –
Đã cập nhật câu trả lời của tôi với 2 ví dụ khác, để tìm kiếm theo một tiền tố nhất định. – AdaTheDev