Qué consulta puede devolver los nombres de todos los procedimientos almacenados en una base de datos de SQL Server
Si la consulta pudiera excluir los procedimientos almacenados del sistema, eso sería aún más útil.
Qué consulta puede devolver los nombres de todos los procedimientos almacenados en una base de datos de SQL Server
Si la consulta pudiera excluir los procedimientos almacenados del sistema, eso sería aún más útil.
Respuestas:
Como dijo Mike, la mejor manera es usarlo information_schema
. Mientras no esté en la base de datos maestra, no se devolverán los procedimientos almacenados del sistema.
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
Si por alguna razón tuvo procedimientos almacenados que no son del sistema en la base de datos maestra, puede usar la consulta (esto filtrará la MAYORÍA de los procedimientos almacenados del sistema):
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*
vistas. Esta consulta también: filtra los procedimientos almacenados CLR, no filtra los procesos almacenados del sistema y devuelve [type] cuando se sabe que [type] siempre será 'P' ya que es la condición WHERE.
Lo siguiente devolverá todos los procedimientos en la base de datos seleccionada
SELECT * FROM sys.procedures
Si está utilizando SQL Server 2005, lo siguiente funcionará:
select *
from sys.procedures
where is_ms_shipped = 0
Puede usar una de las siguientes consultas para encontrar la lista de Procedimientos almacenados en una base de datos:
Consulta1:
SELECT
*
FROM sys.procedures;
Consulta2:
SELECT
*
FROM information_schema.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
Si desea encontrar la lista de todos los SP en todas las bases de datos , puede usar la siguiente consulta:
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
Seleccione todos los procedimientos almacenados y vistas
select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type
Esto también puede ayudar a enumerar el procedimiento, excepto los procedimientos del sistema:
select * from sys.all_objects where type='p' and is_ms_shipped=0
sys.all_objects
ya que está filtrando is_ms_shipped=0
. Puede contener disparadores DDL, pero esos serían filtrados por type='p'
. También podrías usarlo sys.objects
.
Lamentablemente INFORMATION_SCHEMA
no contiene información sobre los procs del sistema.
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
? ¿Y por qué ejecutaría una función objectproperty(object_id, N'IsMSShipped')
para cada fila cuando hay un campo is_ms_shipped
que contiene ese valor? En esa misma línea, ¿por qué ejecutar esa función nuevamente cuando [type] IN ('P', 'PC')
hace lo mismo? Este método es innecesariamente complicado e ineficiente.
Modifiqué la excelente publicación de LostCajun anterior para excluir los procedimientos almacenados del sistema. También eliminé "Extracto". del código porque no pude entender para qué sirve y me dio errores. La declaración "buscar siguiente" dentro del bucle también necesitaba una cláusula "into".
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;
la mejor manera de obtener objetos es usar sys.sql_modules. puede encontrar todo lo que desee de esta tabla y unir esta tabla con otra tabla para obtener más información por 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*
vistas. Esta consulta también filtra los procedimientos almacenados CLR.
Escribí este simple tsql para enumerar el texto de todos los procedimientos almacenados. Asegúrese de sustituir el nombre de su base de datos en el campo.
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;
Esto mostrará todos los procedimientos almacenados y el código:
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'
Esto, enumera todas las cosas que quieres
En 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'"
O
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS
sp_tables
,. Además, "PROCEDIMIENTO" no es una opción válida para sp_tables
. Las únicas opciones para @table_type
son: 'TABLA DEL SISTEMA', 'TABLA' y 'VER'.
Esto devolverá todo el nombre de sp
Select *
FROM sys.procedures where [type] = 'P'
AND is_ms_shipped = 0
AND [name] not like 'sp[_]%diagram%'
[type]
debería ser [type] IN ('P', 'PC')
si no está filtrando los procesos almacenados CLR que están potencialmente allí.
Pruebe este enlace codeplex, esta utilidad ayuda a localizar todos los procedimientos almacenados de la base de datos 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
Esto funcionará en mssql.
Seleccione la lista de procedimientos almacenados en el servidor SQL. Consulte aquí para obtener más información: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
PaymentDetails
tabla. El OP quiere una lista de procedimientos almacenados reales.