How to capture the result set of a stored procedure with a dynamic Select (sp_executesql) in a RDLC report
I need to be able to obtain the result set that will generate a stored procedure that has a dynamic query (sp_executesql
), the problem is that when defining the DataSource
, which in this case would be the stored procedure, it does not return any column as a result by the same from the DataSource
wizard.
I have another report (rdlc) that the stored procedure that has a DataSource is not a dynamic query that returns the result set.
I was thinking about being able to capture the instruction that solves the sp_executesql
in a variable (@instruction
) and then take it and execute it again as Select from the query configuration wizard of TableAdapter
.
ALTER PROCEDURE dbo.StoredProcedureA
@xmlParameter XML
AS
BEGIN
SET NOCOUNT ON
DECLARE @DespachoR VARCHAR(100),
@DespachoRBEsta TINYINT,
@PaisOrigenR VARCHAR(100),
@PaisOrigenBEsta TINYINT,
@Estampilla INTEGER,
@DesdeFecha VARCHAR(10),
@HastaFecha VARCHAR(10),
@desfecha datetime,
@hasfecha datetime,
@strWhereRan VARCHAR(MAX),
@strWhere VARCHAR(MAX),
@seteos nvarchar(200),
@instruccion nvarchar(max),
@instruccion2 nvarchar(max),
@texto varchar(max),
@columna varchar(100),
@tipodato varchar(50)
If @xmlParametros is not null
begin
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
SELECT '@DespachoR', 'E', '(/Parameters/DESPACHOR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@DespachoRBEsta', 'E', '(/Parameters/DESPACHORBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@PaisOrigenR', 'E', '(/Parameters/PAISORIGENR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@PaisOrigenBEsta', 'E', '(/Parameters/PAISORIGENRBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@Estampilla', 'E', '(/Parameters/ESTAMPILLA/text())[1]', 'integer', null
UNION ALL
SELECT '@DesdeFecha', 'E', '(/Parameters/DESDEFECHA/text())[1]', 'varchar(10)', null
UNION ALL
SELECT '@HastaFecha', 'E', '(/Parameters/HASTAFECHA/text())[1]', 'varchar(10)', null
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
begin
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
end
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
--end
--@instruccion: SETEOS
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros, @DespachoR=@DespachoR OUTPUT,
@DespachoRBEsta=@DespachoRBEsta OUTPUT, @PaisOrigenR=@PaisOrigenR OUTPUT, @PaisOrigenBEsta=@PaisOrigenBEsta OUTPUT, @Estampilla=@Estampilla OUTPUT,
@DesdeFecha=@DesdeFecha OUTPUT, @HastaFecha=@HastaFecha OUTPUT
IF @DespachoR is not null
begin
EXEC sp_armo_rango @DespachoR, 'D.Despacho', @DespachoRBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @PaisOrigenR is not null
begin
EXEC sp_armo_rango @PaisOrigenR, 'D.Paisorigen', @PaisOrigenBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @Estampilla is not null
--Esto determina que se listen los despachos que tienen la estampilla indicada, los despachos así determinados se listan completos,
--es decir, con todos los rangos de estampillas.
Set @strWhere = @strWhere + ' AND 0<>(SELECT count(*) FROM Despachosestampillas De1 (nolock)
WHERE De1.Despacho=D.Despacho AND
De1.Hasta >=@estampilla AND De1.Desde <= @estampilla )'
IF @DesdeFecha is not null
begin
select @desfecha=convert(datetime, @desdefecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha >=@desfecha'
end
IF @HastaFecha is not NULL
begin
select @hasfecha=convert(datetime, @HastaFecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha <=@hasfecha'
end
Set @instruccion = N'SELECT D.Despacho, D.Fecha as FechaD, D.Aduana, D.Paisorigen as Pais, D.Garantia,
CASE WHEN D.TipoGarantia="E" THEN "Efectivo"
WHEN D.TipoGarantia="C" THEN "Caución"
WHEN D.TipoGarantia="M" THEN "Mixto"
ELSE null END as Tipo,
D.Efectivo, D.FechaGarantia as Fecha, D.Compania, D.Poliza, D.FechavtoGarantia as Fechavto, D.Monto as Importe,
De.Desde, De.Hasta, convert(varchar(254), D.Observacion) as Observacion
FROM Despachos D (nolock)
LEFT JOIN Despachosestampillas De (nolock) ON D.Despacho=De.Despacho
WHERE 1=1 ' + @strWhere + '
ORDER BY D.Despacho, De.Desde'
exec sp_executesql @instruccion, N'@estampilla integer, @desfecha datetime, @hasfecha datetime', @estampilla=@estampilla, @desfecha=@desfecha, @hasfecha=@hasfecha
end
END
ALTER PROCEDURE dbo.StoredProcedureB
@xmlParametros XML
AS
BEGIN
SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF
SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
DECLARE @Sistema CHAR(1),
@Caratula tinyint,
@FormatoQRP VARCHAR(12),
@seteos NVARCHAR(200),
@instruccion NVARCHAR(max),
@instruccion2 NVARCHAR(max),
@texto VARCHAR(max),
@columna VARCHAR(100),
@tipodato VARCHAR(50)
IF @xmlParametros is not null
BEGIN
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
-- PARAMETRO DIF RUTA_DEL_NODO TIPO_DATO_NODO NULO
SELECT '@Sistema', 'E', '(/Parameters/SISTEMA)[1]', 'char(1)', null
UNION ALL
SELECT '@Caratula', 'E', '(/Parameters/CARATULA)[1]', 'tinyint', null
UNION ALL
SELECT '@FormatoQRP', 'E', '(/Parameters/FORMATOQRP)[1]', 'varchar(12)', null
--SELECT*FROM @xml
--SETEOS SUMADOS A LA INSTRUCCION GRAL.
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
--DECLARA CURSOR PARA RECORRER TABLA DECLARADA
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
BEGIN
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
END
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros,
@Sistema=@Sistema OUTPUT, @Caratula=@Caratula OUTPUT,
@FormatoQRP=@FormatoQRP OUTPUT
END
IF @Sistema != 'C'
SELECT CENPREFI, CODCEN, NOMBRE, ADMNEGOCIOS
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
ELSE
SELECT CENPREFI, CODCEN, NOMBRE
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
END
It is necessary to obtain in both cases the result set to provide the DataSource
defined in the RDLC report.
Thank you so much!
c sql-server rdlc sp-executesql
add a comment |
I need to be able to obtain the result set that will generate a stored procedure that has a dynamic query (sp_executesql
), the problem is that when defining the DataSource
, which in this case would be the stored procedure, it does not return any column as a result by the same from the DataSource
wizard.
I have another report (rdlc) that the stored procedure that has a DataSource is not a dynamic query that returns the result set.
I was thinking about being able to capture the instruction that solves the sp_executesql
in a variable (@instruction
) and then take it and execute it again as Select from the query configuration wizard of TableAdapter
.
ALTER PROCEDURE dbo.StoredProcedureA
@xmlParameter XML
AS
BEGIN
SET NOCOUNT ON
DECLARE @DespachoR VARCHAR(100),
@DespachoRBEsta TINYINT,
@PaisOrigenR VARCHAR(100),
@PaisOrigenBEsta TINYINT,
@Estampilla INTEGER,
@DesdeFecha VARCHAR(10),
@HastaFecha VARCHAR(10),
@desfecha datetime,
@hasfecha datetime,
@strWhereRan VARCHAR(MAX),
@strWhere VARCHAR(MAX),
@seteos nvarchar(200),
@instruccion nvarchar(max),
@instruccion2 nvarchar(max),
@texto varchar(max),
@columna varchar(100),
@tipodato varchar(50)
If @xmlParametros is not null
begin
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
SELECT '@DespachoR', 'E', '(/Parameters/DESPACHOR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@DespachoRBEsta', 'E', '(/Parameters/DESPACHORBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@PaisOrigenR', 'E', '(/Parameters/PAISORIGENR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@PaisOrigenBEsta', 'E', '(/Parameters/PAISORIGENRBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@Estampilla', 'E', '(/Parameters/ESTAMPILLA/text())[1]', 'integer', null
UNION ALL
SELECT '@DesdeFecha', 'E', '(/Parameters/DESDEFECHA/text())[1]', 'varchar(10)', null
UNION ALL
SELECT '@HastaFecha', 'E', '(/Parameters/HASTAFECHA/text())[1]', 'varchar(10)', null
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
begin
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
end
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
--end
--@instruccion: SETEOS
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros, @DespachoR=@DespachoR OUTPUT,
@DespachoRBEsta=@DespachoRBEsta OUTPUT, @PaisOrigenR=@PaisOrigenR OUTPUT, @PaisOrigenBEsta=@PaisOrigenBEsta OUTPUT, @Estampilla=@Estampilla OUTPUT,
@DesdeFecha=@DesdeFecha OUTPUT, @HastaFecha=@HastaFecha OUTPUT
IF @DespachoR is not null
begin
EXEC sp_armo_rango @DespachoR, 'D.Despacho', @DespachoRBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @PaisOrigenR is not null
begin
EXEC sp_armo_rango @PaisOrigenR, 'D.Paisorigen', @PaisOrigenBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @Estampilla is not null
--Esto determina que se listen los despachos que tienen la estampilla indicada, los despachos así determinados se listan completos,
--es decir, con todos los rangos de estampillas.
Set @strWhere = @strWhere + ' AND 0<>(SELECT count(*) FROM Despachosestampillas De1 (nolock)
WHERE De1.Despacho=D.Despacho AND
De1.Hasta >=@estampilla AND De1.Desde <= @estampilla )'
IF @DesdeFecha is not null
begin
select @desfecha=convert(datetime, @desdefecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha >=@desfecha'
end
IF @HastaFecha is not NULL
begin
select @hasfecha=convert(datetime, @HastaFecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha <=@hasfecha'
end
Set @instruccion = N'SELECT D.Despacho, D.Fecha as FechaD, D.Aduana, D.Paisorigen as Pais, D.Garantia,
CASE WHEN D.TipoGarantia="E" THEN "Efectivo"
WHEN D.TipoGarantia="C" THEN "Caución"
WHEN D.TipoGarantia="M" THEN "Mixto"
ELSE null END as Tipo,
D.Efectivo, D.FechaGarantia as Fecha, D.Compania, D.Poliza, D.FechavtoGarantia as Fechavto, D.Monto as Importe,
De.Desde, De.Hasta, convert(varchar(254), D.Observacion) as Observacion
FROM Despachos D (nolock)
LEFT JOIN Despachosestampillas De (nolock) ON D.Despacho=De.Despacho
WHERE 1=1 ' + @strWhere + '
ORDER BY D.Despacho, De.Desde'
exec sp_executesql @instruccion, N'@estampilla integer, @desfecha datetime, @hasfecha datetime', @estampilla=@estampilla, @desfecha=@desfecha, @hasfecha=@hasfecha
end
END
ALTER PROCEDURE dbo.StoredProcedureB
@xmlParametros XML
AS
BEGIN
SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF
SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
DECLARE @Sistema CHAR(1),
@Caratula tinyint,
@FormatoQRP VARCHAR(12),
@seteos NVARCHAR(200),
@instruccion NVARCHAR(max),
@instruccion2 NVARCHAR(max),
@texto VARCHAR(max),
@columna VARCHAR(100),
@tipodato VARCHAR(50)
IF @xmlParametros is not null
BEGIN
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
-- PARAMETRO DIF RUTA_DEL_NODO TIPO_DATO_NODO NULO
SELECT '@Sistema', 'E', '(/Parameters/SISTEMA)[1]', 'char(1)', null
UNION ALL
SELECT '@Caratula', 'E', '(/Parameters/CARATULA)[1]', 'tinyint', null
UNION ALL
SELECT '@FormatoQRP', 'E', '(/Parameters/FORMATOQRP)[1]', 'varchar(12)', null
--SELECT*FROM @xml
--SETEOS SUMADOS A LA INSTRUCCION GRAL.
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
--DECLARA CURSOR PARA RECORRER TABLA DECLARADA
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
BEGIN
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
END
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros,
@Sistema=@Sistema OUTPUT, @Caratula=@Caratula OUTPUT,
@FormatoQRP=@FormatoQRP OUTPUT
END
IF @Sistema != 'C'
SELECT CENPREFI, CODCEN, NOMBRE, ADMNEGOCIOS
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
ELSE
SELECT CENPREFI, CODCEN, NOMBRE
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
END
It is necessary to obtain in both cases the result set to provide the DataSource
defined in the RDLC report.
Thank you so much!
c sql-server rdlc sp-executesql
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47
add a comment |
I need to be able to obtain the result set that will generate a stored procedure that has a dynamic query (sp_executesql
), the problem is that when defining the DataSource
, which in this case would be the stored procedure, it does not return any column as a result by the same from the DataSource
wizard.
I have another report (rdlc) that the stored procedure that has a DataSource is not a dynamic query that returns the result set.
I was thinking about being able to capture the instruction that solves the sp_executesql
in a variable (@instruction
) and then take it and execute it again as Select from the query configuration wizard of TableAdapter
.
ALTER PROCEDURE dbo.StoredProcedureA
@xmlParameter XML
AS
BEGIN
SET NOCOUNT ON
DECLARE @DespachoR VARCHAR(100),
@DespachoRBEsta TINYINT,
@PaisOrigenR VARCHAR(100),
@PaisOrigenBEsta TINYINT,
@Estampilla INTEGER,
@DesdeFecha VARCHAR(10),
@HastaFecha VARCHAR(10),
@desfecha datetime,
@hasfecha datetime,
@strWhereRan VARCHAR(MAX),
@strWhere VARCHAR(MAX),
@seteos nvarchar(200),
@instruccion nvarchar(max),
@instruccion2 nvarchar(max),
@texto varchar(max),
@columna varchar(100),
@tipodato varchar(50)
If @xmlParametros is not null
begin
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
SELECT '@DespachoR', 'E', '(/Parameters/DESPACHOR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@DespachoRBEsta', 'E', '(/Parameters/DESPACHORBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@PaisOrigenR', 'E', '(/Parameters/PAISORIGENR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@PaisOrigenBEsta', 'E', '(/Parameters/PAISORIGENRBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@Estampilla', 'E', '(/Parameters/ESTAMPILLA/text())[1]', 'integer', null
UNION ALL
SELECT '@DesdeFecha', 'E', '(/Parameters/DESDEFECHA/text())[1]', 'varchar(10)', null
UNION ALL
SELECT '@HastaFecha', 'E', '(/Parameters/HASTAFECHA/text())[1]', 'varchar(10)', null
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
begin
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
end
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
--end
--@instruccion: SETEOS
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros, @DespachoR=@DespachoR OUTPUT,
@DespachoRBEsta=@DespachoRBEsta OUTPUT, @PaisOrigenR=@PaisOrigenR OUTPUT, @PaisOrigenBEsta=@PaisOrigenBEsta OUTPUT, @Estampilla=@Estampilla OUTPUT,
@DesdeFecha=@DesdeFecha OUTPUT, @HastaFecha=@HastaFecha OUTPUT
IF @DespachoR is not null
begin
EXEC sp_armo_rango @DespachoR, 'D.Despacho', @DespachoRBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @PaisOrigenR is not null
begin
EXEC sp_armo_rango @PaisOrigenR, 'D.Paisorigen', @PaisOrigenBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @Estampilla is not null
--Esto determina que se listen los despachos que tienen la estampilla indicada, los despachos así determinados se listan completos,
--es decir, con todos los rangos de estampillas.
Set @strWhere = @strWhere + ' AND 0<>(SELECT count(*) FROM Despachosestampillas De1 (nolock)
WHERE De1.Despacho=D.Despacho AND
De1.Hasta >=@estampilla AND De1.Desde <= @estampilla )'
IF @DesdeFecha is not null
begin
select @desfecha=convert(datetime, @desdefecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha >=@desfecha'
end
IF @HastaFecha is not NULL
begin
select @hasfecha=convert(datetime, @HastaFecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha <=@hasfecha'
end
Set @instruccion = N'SELECT D.Despacho, D.Fecha as FechaD, D.Aduana, D.Paisorigen as Pais, D.Garantia,
CASE WHEN D.TipoGarantia="E" THEN "Efectivo"
WHEN D.TipoGarantia="C" THEN "Caución"
WHEN D.TipoGarantia="M" THEN "Mixto"
ELSE null END as Tipo,
D.Efectivo, D.FechaGarantia as Fecha, D.Compania, D.Poliza, D.FechavtoGarantia as Fechavto, D.Monto as Importe,
De.Desde, De.Hasta, convert(varchar(254), D.Observacion) as Observacion
FROM Despachos D (nolock)
LEFT JOIN Despachosestampillas De (nolock) ON D.Despacho=De.Despacho
WHERE 1=1 ' + @strWhere + '
ORDER BY D.Despacho, De.Desde'
exec sp_executesql @instruccion, N'@estampilla integer, @desfecha datetime, @hasfecha datetime', @estampilla=@estampilla, @desfecha=@desfecha, @hasfecha=@hasfecha
end
END
ALTER PROCEDURE dbo.StoredProcedureB
@xmlParametros XML
AS
BEGIN
SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF
SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
DECLARE @Sistema CHAR(1),
@Caratula tinyint,
@FormatoQRP VARCHAR(12),
@seteos NVARCHAR(200),
@instruccion NVARCHAR(max),
@instruccion2 NVARCHAR(max),
@texto VARCHAR(max),
@columna VARCHAR(100),
@tipodato VARCHAR(50)
IF @xmlParametros is not null
BEGIN
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
-- PARAMETRO DIF RUTA_DEL_NODO TIPO_DATO_NODO NULO
SELECT '@Sistema', 'E', '(/Parameters/SISTEMA)[1]', 'char(1)', null
UNION ALL
SELECT '@Caratula', 'E', '(/Parameters/CARATULA)[1]', 'tinyint', null
UNION ALL
SELECT '@FormatoQRP', 'E', '(/Parameters/FORMATOQRP)[1]', 'varchar(12)', null
--SELECT*FROM @xml
--SETEOS SUMADOS A LA INSTRUCCION GRAL.
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
--DECLARA CURSOR PARA RECORRER TABLA DECLARADA
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
BEGIN
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
END
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros,
@Sistema=@Sistema OUTPUT, @Caratula=@Caratula OUTPUT,
@FormatoQRP=@FormatoQRP OUTPUT
END
IF @Sistema != 'C'
SELECT CENPREFI, CODCEN, NOMBRE, ADMNEGOCIOS
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
ELSE
SELECT CENPREFI, CODCEN, NOMBRE
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
END
It is necessary to obtain in both cases the result set to provide the DataSource
defined in the RDLC report.
Thank you so much!
c sql-server rdlc sp-executesql
I need to be able to obtain the result set that will generate a stored procedure that has a dynamic query (sp_executesql
), the problem is that when defining the DataSource
, which in this case would be the stored procedure, it does not return any column as a result by the same from the DataSource
wizard.
I have another report (rdlc) that the stored procedure that has a DataSource is not a dynamic query that returns the result set.
I was thinking about being able to capture the instruction that solves the sp_executesql
in a variable (@instruction
) and then take it and execute it again as Select from the query configuration wizard of TableAdapter
.
ALTER PROCEDURE dbo.StoredProcedureA
@xmlParameter XML
AS
BEGIN
SET NOCOUNT ON
DECLARE @DespachoR VARCHAR(100),
@DespachoRBEsta TINYINT,
@PaisOrigenR VARCHAR(100),
@PaisOrigenBEsta TINYINT,
@Estampilla INTEGER,
@DesdeFecha VARCHAR(10),
@HastaFecha VARCHAR(10),
@desfecha datetime,
@hasfecha datetime,
@strWhereRan VARCHAR(MAX),
@strWhere VARCHAR(MAX),
@seteos nvarchar(200),
@instruccion nvarchar(max),
@instruccion2 nvarchar(max),
@texto varchar(max),
@columna varchar(100),
@tipodato varchar(50)
If @xmlParametros is not null
begin
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
SELECT '@DespachoR', 'E', '(/Parameters/DESPACHOR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@DespachoRBEsta', 'E', '(/Parameters/DESPACHORBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@PaisOrigenR', 'E', '(/Parameters/PAISORIGENR/text())[1]', 'varchar(100)', null
UNION ALL
SELECT '@PaisOrigenBEsta', 'E', '(/Parameters/PAISORIGENRBESTA/text())[1]', 'tinyint', null
UNION ALL
SELECT '@Estampilla', 'E', '(/Parameters/ESTAMPILLA/text())[1]', 'integer', null
UNION ALL
SELECT '@DesdeFecha', 'E', '(/Parameters/DESDEFECHA/text())[1]', 'varchar(10)', null
UNION ALL
SELECT '@HastaFecha', 'E', '(/Parameters/HASTAFECHA/text())[1]', 'varchar(10)', null
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
begin
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
end
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
--end
--@instruccion: SETEOS
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros, @DespachoR=@DespachoR OUTPUT,
@DespachoRBEsta=@DespachoRBEsta OUTPUT, @PaisOrigenR=@PaisOrigenR OUTPUT, @PaisOrigenBEsta=@PaisOrigenBEsta OUTPUT, @Estampilla=@Estampilla OUTPUT,
@DesdeFecha=@DesdeFecha OUTPUT, @HastaFecha=@HastaFecha OUTPUT
IF @DespachoR is not null
begin
EXEC sp_armo_rango @DespachoR, 'D.Despacho', @DespachoRBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @PaisOrigenR is not null
begin
EXEC sp_armo_rango @PaisOrigenR, 'D.Paisorigen', @PaisOrigenBEsta, 0, @strWhereRan OUTPUT
IF @strWhereRan is not null
Set @strWhere = @strWhere + " AND " + rtrim(@strWhereRan)
end
IF @Estampilla is not null
--Esto determina que se listen los despachos que tienen la estampilla indicada, los despachos así determinados se listan completos,
--es decir, con todos los rangos de estampillas.
Set @strWhere = @strWhere + ' AND 0<>(SELECT count(*) FROM Despachosestampillas De1 (nolock)
WHERE De1.Despacho=D.Despacho AND
De1.Hasta >=@estampilla AND De1.Desde <= @estampilla )'
IF @DesdeFecha is not null
begin
select @desfecha=convert(datetime, @desdefecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha >=@desfecha'
end
IF @HastaFecha is not NULL
begin
select @hasfecha=convert(datetime, @HastaFecha, 103)
Set @strWhere = @strWhere + ' AND D.Fecha <=@hasfecha'
end
Set @instruccion = N'SELECT D.Despacho, D.Fecha as FechaD, D.Aduana, D.Paisorigen as Pais, D.Garantia,
CASE WHEN D.TipoGarantia="E" THEN "Efectivo"
WHEN D.TipoGarantia="C" THEN "Caución"
WHEN D.TipoGarantia="M" THEN "Mixto"
ELSE null END as Tipo,
D.Efectivo, D.FechaGarantia as Fecha, D.Compania, D.Poliza, D.FechavtoGarantia as Fechavto, D.Monto as Importe,
De.Desde, De.Hasta, convert(varchar(254), D.Observacion) as Observacion
FROM Despachos D (nolock)
LEFT JOIN Despachosestampillas De (nolock) ON D.Despacho=De.Despacho
WHERE 1=1 ' + @strWhere + '
ORDER BY D.Despacho, De.Desde'
exec sp_executesql @instruccion, N'@estampilla integer, @desfecha datetime, @hasfecha datetime', @estampilla=@estampilla, @desfecha=@desfecha, @hasfecha=@hasfecha
end
END
ALTER PROCEDURE dbo.StoredProcedureB
@xmlParametros XML
AS
BEGIN
SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF
SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
DECLARE @Sistema CHAR(1),
@Caratula tinyint,
@FormatoQRP VARCHAR(12),
@seteos NVARCHAR(200),
@instruccion NVARCHAR(max),
@instruccion2 NVARCHAR(max),
@texto VARCHAR(max),
@columna VARCHAR(100),
@tipodato VARCHAR(50)
IF @xmlParametros is not null
BEGIN
DECLARE @xml TABLE ( identidad integer IDENTITY (1,1) not null, tipo char(1) not null, columna varchar(30) not null, campoxml varchar(1000) not null,
tipodato varchar(50) not null, nulo tinyint null)
INSERT @xml (columna, tipo, campoxml, tipodato, nulo)
-- PARAMETRO DIF RUTA_DEL_NODO TIPO_DATO_NODO NULO
SELECT '@Sistema', 'E', '(/Parameters/SISTEMA)[1]', 'char(1)', null
UNION ALL
SELECT '@Caratula', 'E', '(/Parameters/CARATULA)[1]', 'tinyint', null
UNION ALL
SELECT '@FormatoQRP', 'E', '(/Parameters/FORMATOQRP)[1]', 'varchar(12)', null
--SELECT*FROM @xml
--SETEOS SUMADOS A LA INSTRUCCION GRAL.
SELECT @seteos = 'SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF '
select @instruccion =null, @instruccion2 = N'@xmlParametros xml'
--DECLARA CURSOR PARA RECORRER TABLA DECLARADA
DECLARE INSTRUCCION INSENSITIVE CURSOR FOR
SELECT columna, "@xmlParametros.value('" + campoxml + "', '" + tipodato + "')", tipodato
FROM @xml
WHERE tipo='E'
ORDER BY identidad
OPEN INSTRUCCION
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
WHILE (@@FETCH_STATUS <> -1)
BEGIN
If @instruccion is not null
SELECT @instruccion = @instruccion + ', '
SELECT @instruccion = @instruccion + @columna + '=' + @texto, @instruccion2 = @instruccion2 + ', ' + @columna + ' ' + @tipodato + ' OUTPUT'
FETCH NEXT FROM INSTRUCCION INTO @columna, @texto, @tipodato
END
CLOSE INSTRUCCION
DEALLOCATE INSTRUCCION
SELECT @instruccion = @seteos + N'SELECT ' + @instruccion
exec sp_executesql @instruccion, @instruccion2,@xmlParametros=@xmlParametros,
@Sistema=@Sistema OUTPUT, @Caratula=@Caratula OUTPUT,
@FormatoQRP=@FormatoQRP OUTPUT
END
IF @Sistema != 'C'
SELECT CENPREFI, CODCEN, NOMBRE, ADMNEGOCIOS
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
ELSE
SELECT CENPREFI, CODCEN, NOMBRE
FROM dbo.CENTROSAP (NOLOCK)
ORDER BY CENPREFI
END
It is necessary to obtain in both cases the result set to provide the DataSource
defined in the RDLC report.
Thank you so much!
c sql-server rdlc sp-executesql
c sql-server rdlc sp-executesql
edited Jan 2 at 18:32
NHCives
asked Jan 2 at 16:54
NHCivesNHCives
13
13
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47
add a comment |
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47
add a comment |
2 Answers
2
active
oldest
votes
The WITH RESULT SETS
option can be used to define metadata for a stored procedure when no results are returned by the input parameter(s). By doing this, you will define columns that will be used for the results and there will be columns in work with in the report regardless of the parameter that's used. An example of this follows. Also, is the NOLOCK
hint necessary? This can lead to inconsistent results among other things.
EXEC YourDatabase.YourSchema.YourSP @ParameterName
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(100),
ColumnC VARCHAR(100)
)
)
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
add a comment |
I just generated the connection, the sql command and the data adapter to get the resultset. Could you tell me if it's okay:
SqlConnection conexionSQL = new SqlConnection("Data Source=SRVDESARROLLO7\BASCS;Initial Catalog=BASCSREPORT;Integrated Security=True");
conexionSQL.Open();
string stringCommand = "dbo.XXX_SP_REPORTING_SERVICES_DESPACHOS";
SqlCommand comandoSQL = new SqlCommand(stringCommand, conexionSQL);
comandoSQL.CommandType = CommandType.StoredProcedure;
comandoSQL.Parameters.AddWithValue("@xmlParametros", SqlDbType.Xml).Value = parametrosXML.ToString();
SqlDataAdapter da = new SqlDataAdapter(comandoSQL.ToString(), conexionSQL);
da.SelectCommand = comandoSQL;
BASCSREPORTDataSet dataSet1 = new BASCSREPORTDataSet();
da.Fill(dataSet1, dataSet1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dataSet1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54010205%2fhow-to-capture-the-result-set-of-a-stored-procedure-with-a-dynamic-select-sp-ex%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The WITH RESULT SETS
option can be used to define metadata for a stored procedure when no results are returned by the input parameter(s). By doing this, you will define columns that will be used for the results and there will be columns in work with in the report regardless of the parameter that's used. An example of this follows. Also, is the NOLOCK
hint necessary? This can lead to inconsistent results among other things.
EXEC YourDatabase.YourSchema.YourSP @ParameterName
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(100),
ColumnC VARCHAR(100)
)
)
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
add a comment |
The WITH RESULT SETS
option can be used to define metadata for a stored procedure when no results are returned by the input parameter(s). By doing this, you will define columns that will be used for the results and there will be columns in work with in the report regardless of the parameter that's used. An example of this follows. Also, is the NOLOCK
hint necessary? This can lead to inconsistent results among other things.
EXEC YourDatabase.YourSchema.YourSP @ParameterName
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(100),
ColumnC VARCHAR(100)
)
)
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
add a comment |
The WITH RESULT SETS
option can be used to define metadata for a stored procedure when no results are returned by the input parameter(s). By doing this, you will define columns that will be used for the results and there will be columns in work with in the report regardless of the parameter that's used. An example of this follows. Also, is the NOLOCK
hint necessary? This can lead to inconsistent results among other things.
EXEC YourDatabase.YourSchema.YourSP @ParameterName
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(100),
ColumnC VARCHAR(100)
)
)
The WITH RESULT SETS
option can be used to define metadata for a stored procedure when no results are returned by the input parameter(s). By doing this, you will define columns that will be used for the results and there will be columns in work with in the report regardless of the parameter that's used. An example of this follows. Also, is the NOLOCK
hint necessary? This can lead to inconsistent results among other things.
EXEC YourDatabase.YourSchema.YourSP @ParameterName
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(100),
ColumnC VARCHAR(100)
)
)
answered Jan 2 at 18:27
userfl89userfl89
2,9991513
2,9991513
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
add a comment |
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
@NHCives I didn't quite understand your comment. Did this solve your problem?
– userfl89
Jan 4 at 18:42
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
Good afternoon! I do not think the problem is in the data type of each column that composes the ResultSet, but rather that it is not recognizing the Stored Procedure as an Object that returns rows, as if the case of the SP that has a "Select"
– NHCives
Jan 4 at 18:50
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
The WITH RESULT SETS option defines the columns that are returned. The data types are included to associate the proper metadata. This is similar to defining what columns the "Select" will consist of.
– userfl89
Jan 4 at 18:54
add a comment |
I just generated the connection, the sql command and the data adapter to get the resultset. Could you tell me if it's okay:
SqlConnection conexionSQL = new SqlConnection("Data Source=SRVDESARROLLO7\BASCS;Initial Catalog=BASCSREPORT;Integrated Security=True");
conexionSQL.Open();
string stringCommand = "dbo.XXX_SP_REPORTING_SERVICES_DESPACHOS";
SqlCommand comandoSQL = new SqlCommand(stringCommand, conexionSQL);
comandoSQL.CommandType = CommandType.StoredProcedure;
comandoSQL.Parameters.AddWithValue("@xmlParametros", SqlDbType.Xml).Value = parametrosXML.ToString();
SqlDataAdapter da = new SqlDataAdapter(comandoSQL.ToString(), conexionSQL);
da.SelectCommand = comandoSQL;
BASCSREPORTDataSet dataSet1 = new BASCSREPORTDataSet();
da.Fill(dataSet1, dataSet1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dataSet1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
add a comment |
I just generated the connection, the sql command and the data adapter to get the resultset. Could you tell me if it's okay:
SqlConnection conexionSQL = new SqlConnection("Data Source=SRVDESARROLLO7\BASCS;Initial Catalog=BASCSREPORT;Integrated Security=True");
conexionSQL.Open();
string stringCommand = "dbo.XXX_SP_REPORTING_SERVICES_DESPACHOS";
SqlCommand comandoSQL = new SqlCommand(stringCommand, conexionSQL);
comandoSQL.CommandType = CommandType.StoredProcedure;
comandoSQL.Parameters.AddWithValue("@xmlParametros", SqlDbType.Xml).Value = parametrosXML.ToString();
SqlDataAdapter da = new SqlDataAdapter(comandoSQL.ToString(), conexionSQL);
da.SelectCommand = comandoSQL;
BASCSREPORTDataSet dataSet1 = new BASCSREPORTDataSet();
da.Fill(dataSet1, dataSet1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dataSet1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
add a comment |
I just generated the connection, the sql command and the data adapter to get the resultset. Could you tell me if it's okay:
SqlConnection conexionSQL = new SqlConnection("Data Source=SRVDESARROLLO7\BASCS;Initial Catalog=BASCSREPORT;Integrated Security=True");
conexionSQL.Open();
string stringCommand = "dbo.XXX_SP_REPORTING_SERVICES_DESPACHOS";
SqlCommand comandoSQL = new SqlCommand(stringCommand, conexionSQL);
comandoSQL.CommandType = CommandType.StoredProcedure;
comandoSQL.Parameters.AddWithValue("@xmlParametros", SqlDbType.Xml).Value = parametrosXML.ToString();
SqlDataAdapter da = new SqlDataAdapter(comandoSQL.ToString(), conexionSQL);
da.SelectCommand = comandoSQL;
BASCSREPORTDataSet dataSet1 = new BASCSREPORTDataSet();
da.Fill(dataSet1, dataSet1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dataSet1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
I just generated the connection, the sql command and the data adapter to get the resultset. Could you tell me if it's okay:
SqlConnection conexionSQL = new SqlConnection("Data Source=SRVDESARROLLO7\BASCS;Initial Catalog=BASCSREPORT;Integrated Security=True");
conexionSQL.Open();
string stringCommand = "dbo.XXX_SP_REPORTING_SERVICES_DESPACHOS";
SqlCommand comandoSQL = new SqlCommand(stringCommand, conexionSQL);
comandoSQL.CommandType = CommandType.StoredProcedure;
comandoSQL.Parameters.AddWithValue("@xmlParametros", SqlDbType.Xml).Value = parametrosXML.ToString();
SqlDataAdapter da = new SqlDataAdapter(comandoSQL.ToString(), conexionSQL);
da.SelectCommand = comandoSQL;
BASCSREPORTDataSet dataSet1 = new BASCSREPORTDataSet();
da.Fill(dataSet1, dataSet1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dataSet1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
answered Jan 7 at 13:00
NHCivesNHCives
13
13
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54010205%2fhow-to-capture-the-result-set-of-a-stored-procedure-with-a-dynamic-select-sp-ex%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Try adding a "USE DataBaseName" in the query. the server can have more than one database and Report Manager doe not know which database to query. The RDLC (is text and can open with Notepad) file has a tag with CommandText and you can put the command text into SSMS to test and make sure it returns results. The greater than sign and less than sign are html > and < and need to get replace in SSMS.
– jdweng
Jan 2 at 17:03
Good! In the CommandText tag as you indicated me the same figure the following: <CommandText> / * Local Query * / </ CommandText> With respect to the signs greater than and less than, I can not understand what you indicate.
– NHCives
Jan 2 at 17:47
html contains the characters '<' and '>' around the element names to the innertext cannot contain these two characters. So the innertext of the html you use '>' instead of the greater than sign and '<' instead of the less than sign. The innertext should be what you put in comments a "/* Local Query */ I assume there is a real SELECT statement instead of just the comments.
– jdweng
Jan 2 at 17:52
There add the full code of the SP that I am using to bring me the result set. As I indicated, the inconvenience is when I add a data set to the rdlc report, it is not giving me anything back.
– NHCives
Jan 3 at 15:11
I would add a "USE" into the query to make sure it is using the right database. I would check log files to see if database is reporting any errors. I would also would try to determine if the procedures are being called. You could create a view for debugging and add writes to view so you can tell if the procedures ran and how far the code executed.
– jdweng
Jan 3 at 17:47