sql-server - sistema - retornar valor stored procedure sql server
Consulta para enumerar todos los procedimientos almacenados. (21)
A mi entender, el método "preferido" es usar las tablas de esquema de información:
select *
from information_schema.routines
where routine_type = ''PROCEDURE''
¿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, sería aún más útil.
Desafortunadamente, INFORMATION_SCHEMA
no contiene información sobre los procesos del sistema.
SELECT *
FROM sys.objects
WHERE objectproperty(object_id, N''IsMSShipped'') = 0
AND objectproperty(object_id, N''IsProcedure'') = 1
Escribí este simple tsql para listar 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 devolverá todo el nombre sp
Select *
FROM sys.procedures where [type] = ''P''
AND is_ms_shipped = 0
AND [name] not like ''sp[_]%diagram%''
Esto le dará sólo los nombres de los procedimientos almacenados.
select specific_name
from information_schema.routines
where routine_type = ''PROCEDURE'';
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
Esto, lista todas las cosas que quieras.
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
He ajustado la excelente publicación de LostCajun para excluir los procedimientos almacenados del sistema. También quité "Extraer". del código porque no pude averiguar para qué es y me dio errores. La declaración "buscar el 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;
Lo siguiente devolverá todos los procedimientos en la base de datos seleccionada
SELECT * FROM sys.procedures
Para listar los procedimientos almacenados para una base de datos MySQL particular:
SHOW PROCEDURE STATUS WHERE db = ''databaseName'';
Pruebe este enlace de codeplex, esta utilidad de utilidad para localizar todos los procedimientos almacenados desde la base de datos SQL.
Puede probar esta consulta para obtener procedimientos y funciones almacenados:
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
Puede usar una de las siguientes consultas para encontrar la lista de procedimientos almacenados en una base de datos:
Consulta 1:
SELECT
*
FROM sys.procedures;
Consulta2:
SELECT
*
FROM information_schema.routines
WHERE ROUTINE_TYPE = ''PROCEDURE''
Si desea buscar la lista de todos los SP en todas las bases de datos , puede utilizar 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
Sólo los nombres:
SELECT SPECIFIC_NAME
FROM YOUR_DB_NAME.information_schema.routines
WHERE routine_type = ''PROCEDURE''
Seleccionar todos los procedimientos y vistas almacenados
select name,type,type_desc
from sys.objects
where type in (''V'',''P'')
order by name,type
Si está utilizando SQL Server 2005, lo siguiente funcionará:
select *
from sys.procedures
where is_ms_shipped = 0
la mejor manera de obtener objetos es usar sys.sql_modules. puede encontrar todo lo que desee de esta tabla y unirse a 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''
Como dijo Mike, la mejor manera es usar el 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 usted tenía procedimientos almacenados que no eran del sistema en la base de datos maestra, podría 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'')
select *
from dbo.sysobjects
where xtype = ''P''
and status > 0
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'')