Hangi sorgu bir SQL Server veritabanında depolanan tüm yordamların adlarını döndürebilir
Sorgu sistemde saklı yordamları hariç tutabilirse, bu daha da yararlı olacaktır.
Hangi sorgu bir SQL Server veritabanında depolanan tüm yordamların adlarını döndürebilir
Sorgu sistemde saklı yordamları hariç tutabilirse, bu daha da yararlı olacaktır.
Yanıtlar:
Mike'ın belirttiği gibi, en iyi yol kullanmaktır information_schema
. Ana veritabanında olmadığınız sürece, sistemde saklı yordamlar döndürülmez.
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
Herhangi bir nedenle ana veritabanında sistem dışı saklı yordamlarınız varsa, sorguyu kullanabilirsiniz (bu, MOST sistem saklı yordamlarını filtreleyecektir):
SELECT *
FROM [master].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')
dbo.sys*
görünümlerden uzaklaşmalıdır . Bu sorgu ayrıca: CLR saklı yordamlarını filtreler, sistem saklı yordamları filtrelemez ve WHERE koşulu olduğu için [type] 'ın her zaman' P 'olacağı bilindiğinde [type] değerini döndürür.
Aşağıdaki seçili veritabanındaki tüm yordamları döndürür
SELECT * FROM sys.procedures
SQL Server 2005 kullanıyorsanız aşağıdakiler çalışır:
select *
from sys.procedures
where is_ms_shipped = 0
Bir veritabanında Saklı Yordamlar listesini bulmak için aşağıdaki sorgulardan birini kullanabilirsiniz:
Sorgu1:
SELECT
*
FROM sys.procedures;
Sorgu2:
SELECT
*
FROM information_schema.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
Tüm Veritabanlarındaki tüm SP'lerin listesini bulmak istiyorsanız aşağıdaki sorguyu kullanabilirsiniz:
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
Tüm Saklı Yordamları ve Görünümleri Seçme
select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type
Bu, sistem prosedürleri dışında prosedürün listelenmesine de yardımcı olabilir:
select * from sys.all_objects where type='p' and is_ms_shipped=0
sys.all_objects
Filtrelediğiniz için kullanmanız için hiçbir neden yoktur is_ms_shipped=0
. DDL Tetikleyicileri içerebilir, ancak bunlar tarafından filtrelenir type='p'
. Siz de kullanabilirsiniz sys.objects
.
Maalesef INFORMATION_SCHEMA
sistem süreçleri hakkında bilgi içermiyor.
SELECT *
FROM sys.objects
WHERE objectproperty(object_id, N'IsMSShipped') = 0
AND objectproperty(object_id, N'IsProcedure') = 1
sys.procedures where is_ms_shipped = 0
? Ve bu değeri içeren objectproperty(object_id, N'IsMSShipped')
bir alan olduğunda neden her satır için bir işlev çalıştırıyorsunuz is_ms_shipped
? Aynı hatlar boyunca [type] IN ('P', 'PC')
, aynı şeyi ne zaman yapar? Bu yöntem gereksiz yere karmaşık ve verimsizdir.
Sistem saklı yordamları hariç tutmak için yukarıdaki LostCajun mükemmel yazı tweaked. Ayrıca "Extract" ı da kaldırdım. çünkü bunun ne olduğunu anlayamadım ve bana hata verdi. Döngü içindeki "sonraki getir" deyimi de "içine" deyimine ihtiyaç duyuyordu.
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;
nesneleri elde etmenin en iyi yolu sys.sql_modules kullanmaktır. object_id ile daha fazla bilgi almak için bu tablodan istediğiniz her şeyi bulabilir ve bu tabloya başka bir tabloyla katılabilirsiniz.
SELECT o. object_id,o.name AS name,o.type_desc,m.definition,schemas.name scheamaName
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.OBJECT_ID
INNER JOIN sys.schemas ON schemas.schema_id = o.schema_id
WHERE [TYPE]='p'
select *
from dbo.sysobjects
where xtype = 'P'
and status > 0
dbo.sys*
görünümlerden uzaklaşmalıdır . Bu sorgu ayrıca CLR saklı yordamlarını da filtreler.
Tüm saklı yordamların metnini listelemek için bu basit tsql yazdım. Veritabanı adınızı yerine koyduğunuzdan emin olun.
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;
Bu, tüm saklı yordamları ve kodu gösterecektir:
select sch.name As [Schema], obj.name AS [Stored Procedure], code.definition AS [Code] from sys.objects as obj
join sys.sql_modules as code on code.object_id = obj.object_id
join sys.schemas as sch on sch.schema_id = obj.schema_id
where obj.type = 'P'
Bu, istediğiniz her şeyi listeleyin
Sql Server 2005, 2008, 2012'de:
Use [YourDataBase]
EXEC sp_tables @table_type = "'PROCEDURE'"
EXEC sp_tables @table_type = "'TABLE'"
EXEC sp_tables @table_type = "'VIEW'"
VEYA
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS
sp_tables
. Ayrıca, "PROSEDÜR" için geçerli bir seçenek değildir sp_tables
. Tek seçenekler @table_type
şunlardır: 'SİSTEM TABLOSU', 'TABLO' ve 'GÖRÜNÜM'.
Bu, tüm sp adını döndürecektir
Select *
FROM sys.procedures where [type] = 'P'
AND is_ms_shipped = 0
AND [name] not like 'sp[_]%diagram%'
[type]
gerekir [type] IN ('P', 'PC')
.
Bu codeplex bağlantısını deneyin, bu yardımcı program sql veritabanındaki tüm saklı yordamı yerelleştirmek için yardımcı olur.
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')
USE DBNAME
select ROUTINE_NAME from information_schema.routines
where routine_type = 'PROCEDURE'
GO
Bu mssql üzerinde çalışacaktır.
SQL sunucusunda saklı yordam listesini seçin. Daha fazla bilgi için buraya bakın: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
PaymentDetails
tablodaki kayıtların listesini döndüren saklı yordam oluşturuyor gibi görünüyor . OP, gerçek saklı yordamların bir listesini ister.