Estoy intentando crear un nuevo informe SSRS que devolverá y mostrará los valores de un procedimiento almacenado de SQL Server. Pasaré un parámetro @clientID
al procedimiento almacenado. Este parámetro se usa en 3 declaraciones diferentes BEGIN
/END
. Cada instrucción BEGIN
`END` toma el parámetro y realiza una consulta, devolviendo datos específicos.SSRS - devuelve varias consultas en un procedimiento almacenado
Cuando creo el informe SSRS, apunto el origen de datos a este procedimiento almacenado, pero solo se devuelve el conjunto de resultados de la primera declaración BEGIN
/END
. Si ejecuto el procedimiento almacenado en SSMS, obtengo 3 conjuntos de resultados diferentes, como se esperaba.
¿Cómo puedo obtener esos 3 BEGIN
/END
conjuntos de resultados en un solo informe?
Código de ejemplo:
CREATE PROCEDURE pClientData (@clientID varchar(30))
AS
DECLARE @Orders table (
...
);
DECLARE @Results table (
...
);
DECLARE @Status table (
...
);
BEGIN
SET NOCOUNT ON;
-- Get all the orders by client
INSERT INTO @Orders
SELECT ...
-- Return the results --
SELECT *
FROM @Orders;
END
BEGIN
SET NOCOUNT ON;
-- Determine the Results
INSERT INTO @Results
SELECT ...
SELECT *
FROM @Results;
END
BEGIN
SET NOCOUNT ON;
SET @Status = (
SELECT ...
);
SELECT @Status as Status;
END
GO
llamada de consulta de SSRS:
EXEC pClientData @clientID
Gracias por el enlace. Te creo, pero ¿no crees que es una forma ineficiente de consultar? En lugar de calcular algo una vez y usarlo en 3 lugares, sé que debo calcularlo 3 veces por separado. Lame ... – mikebmassey
@mikebmassey Estoy de acuerdo, es cojo ... algo que he tenido que hacer en el pasado cuando un cálculo es muy caro ...Tengo el primer procedimiento almacenado hacer el cálculo y guardar los resultados en una tabla (no temporal) antes de devolver su resultado, y luego hacer que los siguientes procedimientos almacenados hagan referencia a la tabla que fue poblada por la primera llamada ... Por supuesto, esto puede ser más difícil dependiendo de cuántas versiones diferentes de los datos existen/concurrencia/etc ... –
No pensé en usar una tabla temporal. Entonces, '#' podría vivir, pero no '@' de la consulta a la consulta? – mikebmassey