sql server شرح الاستعلام لسرد كافة الإجراءات المخزنة




stored procedure mysql (16)

ما يمكن الاستعلام بإرجاع أسماء كافة الإجراءات المخزنة في قاعدة بيانات SQL Server

إذا كان باستطاعة الاستعلام استبعاد إجراءات النظام المخزنة ، فسيكون ذلك أكثر فائدة.


يمكنك استخدام أحد الاستعلامات أدناه للعثور على قائمة الإجراءات المخزنة في قاعدة بيانات واحدة:

الاستعلام 1:

    SELECT 
        *
    FROM sys.procedures;

Query2:

    SELECT 
        * 
    FROM information_schema.routines 
    WHERE ROUTINE_TYPE = 'PROCEDURE' 

إذا كنت ترغب في العثور على قائمة بجميع SPs في جميع قواعد البيانات ، يمكنك استخدام الاستعلام أدناه:

    CREATE TABLE #ListOfSPs 
    (
        DBName varchar(100), 
        [OBJECT_ID] INT,
        SPName varchar(100)
    )

    EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures'

    SELECT 
        * 
    FROM #ListOfSPs

لسرد الإجراءات المخزنة لقاعدة بيانات MySQL:

SHOW PROCEDURE STATUS WHERE db = 'databaseName';

حدد كافة الإجراءات المخزنة وطرق العرض

select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type

كتبت هذا tsql بسيطة لسرد نص جميع الإجراءات المخزنة. تأكد من استبدال اسم قاعدة البيانات في الحقل.

use << database name >>
go

declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
select p.name  from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
    set @aQuery = 'sp_helptext [Extract.' + @spName + ']';
    exec sp_executesql @aQuery;
    fetch next from allSP;
end;
close allSP;
deallocate allSP;

لقد قمت بتعديل وظيفة LostCajun الممتازة أعلاه لاستبعاد إجراءات النظام المخزنة. أزلت أيضًا "مقتطف". من الكود لأنني لم أستطع معرفة ما هو الأمر وأعطاني أخطاء. تحتاج أيضًا عبارة "الجلب التالي" داخل الحلقة أيضًا إلى جملة "إلى".

use <<databasename>>
go

declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
    select p.name  
    from sys.procedures p 
    where p.type_desc = 'SQL_STORED_PROCEDURE' 
    and LEFT(p.name,3) NOT IN ('sp_','xp_','ms_')
    order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
    set @aQuery = 'sp_helptext [' + @spName + ']';
    exec sp_executesql @aQuery;
    fetch next from allSP into @spName;
end;
close allSP;
deallocate allSP;

select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type = 'PROCEDURE'

select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type ='procedure' and left(ROUTINE_NAME,3) not in('sp_', 'xp_', 'ms_')


   SELECT name, type   FROM dbo.sysobjects
 WHERE (type = 'P')

سوف التالية إرجاع كافة الإجراءات في قاعدة البيانات المحددة

SELECT * FROM sys.procedures

SELECT name, 
       type
  FROM dbo.sysobjects
 WHERE (type = 'P')

فقط الأسماء:

SELECT SPECIFIC_NAME  
FROM YOUR_DB_NAME.information_schema.routines  
WHERE routine_type = 'PROCEDURE'

للأسف ، لا يحتوي INFORMATION_SCHEMA على معلومات حول إصدارات النظام.

SELECT *
  FROM sys.objects
 WHERE objectproperty(object_id, N'IsMSShipped') = 0
   AND objectproperty(object_id, N'IsProcedure') = 1

هذا ، قائمة بكل الأشياء التي تريدها

في خادم Sql 2005 ، 2008 ، 2012:

Use [YourDataBase]

EXEC sp_tables @table_type = "'PROCEDURE'" 
EXEC sp_tables @table_type = "'TABLE'"
EXEC sp_tables @table_type = "'VIEW'" 

أو

SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS

هذا سيعيد كل اسم اس

Select * 
FROM sys.procedures where [type] = 'P' 
     AND is_ms_shipped = 0 
     AND [name] not like 'sp[_]%diagram%'

يمكنك تجربة هذا الاستعلام للحصول على الإجراءات والوظائف المخزنة:

SELECT name, type
FROM dbo.sysobjects
WHERE type IN (
    'P', -- stored procedures
    'FN', -- scalar functions 
    'IF', -- inline table-valued functions
    'TF' -- table-valued functions
)
ORDER BY type, name

إذا كنت تستخدم SQL Server 2005 ، فسيعمل ما يلي:

select *
  from sys.procedures
 where is_ms_shipped = 0

وكما قال مايك ، فإن أفضل طريقة هي استخدام information_schema . طالما أنك لست في قاعدة البيانات الرئيسية ، لن يتم إرجاع إجراءات النظام المخزنة.

select * 
  from DatabaseName.information_schema.routines 
 where routine_type = 'PROCEDURE'

إذا كان لديك إجراءات تخزين غير نظامية في قاعدة البيانات الرئيسية لسبب ما ، فيمكنك استخدام الاستعلام (سيؤدي ذلك إلى تصفية الإجراءات المخزنة لنظام MOST):

select * 
  from master.information_schema.routines 
 where routine_type = 'PROCEDURE' 
   and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_')

select *  
  from dbo.sysobjects
 where xtype = 'P'
   and status > 0




tsql