17 Stimmen

Keine Felder für dynamische SQL-gespeicherte Prozeduren in SSRS mit SET FMTONLY

Ich habe das folgende SP, das korrekt funktioniert, wenn es alleine ausgeführt wird:

USE [Orders]
GO
SET FMTONLY OFF; 

CREATE PROCEDURE [dbo].[Get_Details_by_Type]

@isArchived varchar(10),
@Type varchar(50)

AS
BEGIN
    -- SET NOCOUNT ON hinzugefügt, um zusätzliche Ergebnismengen bei
    -- SELECT-Anweisungen nicht zu beeinträchtigen.
    SET NOCOUNT ON;
    declare @sqlQuery nvarchar(max)
          IF(@isArchived = 'ALL')
            BEGIN
                set @sqlQuery  = 'SELECT *  FROM [dbo].[Orders] 
              WHERE ' + @Type + ' != € 
                ORDER BY [IDNumber]'
                exec sp_executesql @sqlQuery
            END
        ELSE
            BEGIN
            set @sqlQuery  = 'SELECT * FROM [dbo].[Orders] 
          WHERE ' + @Type + ' != € AND [isArchived] = ' + @isArchived + ' ORDER BY [IDNumber]'
            exec sp_executesql @sqlQuery
        END
END
SET FMTONLY ON; 

Das Problem, das ich habe, ist, dass wenn ich ein DataSet für einen SSRS-Bericht hinzufüge, keine Felder/Spalten im Abschnitt "Felder" angezeigt werden. Ich vermute, dass dies auf den dynamischen SQL zurückzuführen ist?

Wie kann ich das lösen?

0voto

Dies ist eine sehr späte Ergänzung, aber für diejenigen unter uns, die neu in der SSRS/Report-Entwicklung sind: Vergessen Sie nicht, die Reihenfolge der Parameter im Berichtsdatenbereich in Visual Studio zu überprüfen. Sie werden von oben nach unten erstellt, sodass ein Parameter oben nicht von einem Parameter unten abhängig sein kann. Dies war ein Problem, das ich mit einem Bericht hatte, aber die Fehlermeldung, die ich erhalten habe, hat das nicht angegeben, also habe ich stundenlang damit verbracht, es zu lösen.

0voto

greg Punkte 1503

Ich stieß auf ein ähnliches Problem. Ich habe einige Debug-Statements, die ich oft mit einer Flag-Variable ein- oder ausschalte.

Diese Zeile hat die Ergebnisse immer noch beeinflusst, obwohl sie nicht ausgeführt wird (@debug =0)

-- Überprüfen Sie Ihre Arbeit
if @debug =1  select @reportStartDate  RSD ,@reportEndDate 
         , @yearStart YS, @folderStartDate  FSD, @MonthCount MC
         , @dataStart  DataStart

Ich habe das Problem entdeckt, indem ich das SP mit fmtONly ausgeführt habe

SET FMTONLY ON
exec rpt_mo_DashBoard_YTD_Total  'ajax20','1.12.2019'

Ich habe das Problem gelöst, indem ich den Code im SP auskommentiert habe. Ja, jetzt muss ich jedes Rückgabestatement einzeln auskommentieren/ kommentieren, wenn es Zeit ist zu debuggen ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X