select * from (EXEC sp_SomeStoredProc)
Si no puede hacer esto, entonces ¿qué impide que se agregue al estándar SQL o T-SQL?¿Puede hacer una selección de los resultados de un procedimiento almacenado en T-SQL
select * from (EXEC sp_SomeStoredProc)
Si no puede hacer esto, entonces ¿qué impide que se agregue al estándar SQL o T-SQL?¿Puede hacer una selección de los resultados de un procedimiento almacenado en T-SQL
No puede hacer esto, sin embargo, puede hacerlo como una inserción. p.ej.
insert mytable
exec myStoredProcedure
Además, nunca nombre sus procedimientos almacenados sp_xxxx. Esto se debe a que SQL siempre buscará en el área del procedimiento almacenado del sistema debido a sp_ antes de buscar en los procedimientos almacenados del usuario, lo que ocasionará una pequeña pérdida en el rendimiento que podría agregar que es bastante significativa en un proceso que se ejecuta con frecuencia.
¿Qué sucede si el proceso almacenado no devuelve filas? ¿Múltiples conjuntos de resultados? Cambios? Los posibles usos de un proceso almacenado son muchos y variados.
Cuando tiene SELECT * FROM TableOrView
, existe una estructura y sintaxis de enlace directo y fácil de verificar.
Más correctamente, en el sentido relacional, un proceso almacenado no es una relación/tabla, por lo que no puede seleccionarlo.
Las funciones definidas por el usuario consiguen lo que desean pero permiten que el código se ajuste a algún concepto de relación/tabla.
No puede hacerlo, pero podría considerar una función en sqlserver2005. He aquí un ejemplo de función que crea una tabla de una lista separada por comas
Create Function [dbo].[CsvToInt] (@Array varchar(1000))
returns @IntTable table
(IntValue int)
AS
begin
declare @separator char(1)
set @separator = ','
declare @separator_position int
declare @array_value varchar(1000)
set @array = @array + ','
while patindex('%,%' , @array) <> 0
begin
select @separator_position = patindex('%,%' , @array)
select @array_value = left(@array, @separator_position - 1)
Insert @IntTable
Values (Cast(@array_value as int))
select @array = stuff(@array, 1, @separator_position, '')
end
return
end
Y luego sencilla de selección de la función de separar ...
Select * FROM dbo.CsvToInt('1,2,3,5')
y obtendrá un valor de la tabla.
Es posible, pero ciertamente no es el camino correcto a seguir:
USE test
GO
CREATE procedure dbo.select1 AS
SELECT 1
GO
EXEC sp_addlinkedserver @server='OQtest', @datasrc='localhost', @provider='SQLNCLI', @srvproduct=''
GO
SELECT * FROM OPENQUERY(OQtest, 'test.dbo.select1')
También es posible que necesite ajustar la configuración de seguridad en el servidor para que esto funcione.
Puede usar el enfoque descrito por ck, pero esto no es realmente recomendable. Puede consultar la sección INSERT-EXEC de una gran publicación How to Share Data Between Stored Procedures por Erland Sommarskog para obtener más detalles.
Posible duplicado: http://stackoverflow.com/questions/209383/select-columns-from-result-set-of-stored-procedure – Hannele