Permintaan apa yang dapat mengembalikan nama semua prosedur yang tersimpan dalam database SQL Server
Jika kueri bisa mengecualikan prosedur tersimpan sistem, itu akan lebih bermanfaat.
Permintaan apa yang dapat mengembalikan nama semua prosedur yang tersimpan dalam database SQL Server
Jika kueri bisa mengecualikan prosedur tersimpan sistem, itu akan lebih bermanfaat.
Jawaban:
Seperti yang dikatakan Mike, cara terbaik adalah menggunakan information_schema
. Selama Anda tidak berada di database master, prosedur yang tersimpan sistem tidak akan dikembalikan.
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
Jika karena alasan tertentu Anda memiliki prosedur tersimpan non-sistem di master database, Anda dapat menggunakan kueri (ini akan memfilter prosedur yang paling tersimpan dalam sistem):
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*
pandangan. Kueri ini juga: memfilter prosedur tersimpan CLR, tidak memfilter procs sistem yang tersimpan, dan mengembalikan [tipe] ketika diketahui bahwa [tipe] akan selalu menjadi 'P' karena ini adalah kondisi WHERE.
Berikut ini akan Mengembalikan Semua Prosedur dalam database yang dipilih
SELECT * FROM sys.procedures
Jika Anda menggunakan SQL Server 2005 yang berikut ini akan berfungsi:
select *
from sys.procedures
where is_ms_shipped = 0
Anda dapat menggunakan salah satu pertanyaan di bawah ini untuk menemukan daftar Prosedur Tersimpan dalam satu database:
Pertanyaan1:
SELECT
*
FROM sys.procedures;
Pertanyaan2:
SELECT
*
FROM information_schema.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
Jika Anda ingin menemukan daftar semua SP di semua Database Anda dapat menggunakan kueri di bawah ini:
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
Pilih Semua Prosedur dan Tampilan yang Tersimpan
select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type
Ini juga dapat membantu untuk membuat daftar prosedur kecuali prosedur sistem:
select * from sys.all_objects where type='p' and is_ms_shipped=0
sys.all_objects
karena Anda memfilter is_ms_shipped=0
. Itu bisa berisi Pemicu DDL, tetapi itu akan disaring oleh type='p'
. Anda mungkin juga menggunakannya sys.objects
.
Sayangnya INFORMATION_SCHEMA
tidak mengandung info tentang procs sistem.
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
? Dan mengapa Anda menjalankan fungsi objectproperty(object_id, N'IsMSShipped')
untuk setiap baris ketika ada bidang is_ms_shipped
yang berisi nilai itu? Sepanjang garis yang sama, mengapa menjalankan fungsi itu lagi ketika [type] IN ('P', 'PC')
melakukan hal yang sama? Metode ini tidak perlu rumit dan tidak efisien.
Saya telah men-tweak posting LostCajun yang sangat baik di atas untuk mengecualikan prosedur yang tersimpan sistem. Saya juga menghapus "Ekstrak." dari kode karena saya tidak tahu untuk apa itu dan memberi saya kesalahan. Pernyataan "fetch next" di dalam loop juga membutuhkan klausul "menjadi".
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;
cara terbaik untuk mendapatkan objek adalah menggunakan sys.sql_modules. Anda dapat menemukan setiap hal yang Anda inginkan dari tabel ini dan bergabung dengan tabel ini dengan tabel lain untuk mendapatkan informasi lebih lanjut dengan object_id
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*
pandangan. Kueri ini juga memfilter prosedur tersimpan CLR.
Saya menulis tsql sederhana ini untuk membuat daftar teks dari semua prosedur yang tersimpan. Pastikan untuk mengganti nama database Anda di bidang.
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;
Ini akan menunjukkan semua prosedur tersimpan dan kode:
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'
Ini, daftarkan semua hal yang Anda inginkan
Di Sql Server 2005, 2008, 2012:
Use [YourDataBase]
EXEC sp_tables @table_type = "'PROCEDURE'"
EXEC sp_tables @table_type = "'TABLE'"
EXEC sp_tables @table_type = "'VIEW'"
ATAU
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS
sp_tables
,. Juga, "PROSEDUR" bukan opsi yang valid untuk sp_tables
. Satu-satunya pilihan @table_type
adalah: 'TABEL SISTEM', 'TABEL', dan 'LIHAT'.
Ini akan mengembalikan semua nama sp
Select *
FROM sys.procedures where [type] = 'P'
AND is_ms_shipped = 0
AND [name] not like 'sp[_]%diagram%'
[type]
harus [type] IN ('P', 'PC')
lain Anda memfilter setiap proksi yang disimpan CLR yang berpotensi ada.
Coba tautan codeplex ini, utilitas ini membantu melokalkan semua prosedur tersimpan dari basis data sql.
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
Ini akan bekerja pada mssql.
Pilih daftar prosedur tersimpan di SQL server. Lihat di sini untuk lebih lanjut: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
PaymentDetails
tabel. OP menginginkan daftar prosedur tersimpan yang sebenarnya.