2010-04-23 2 views
3

Utilisation de SQL Server 2008 Reporting Services:Puis-je utiliser la variable @table dans le Générateur de rapports SQL Server?

Je suis en train de rédiger un rapport qui affiche des données corrélées, donc je pensais que d'utiliser une variable @table comme si

DECLARE @Results TABLE (Number int 
         ,Name nvarchar(250) 
         ,Total1 money 
         ,Total2 money 
         ) 

insert into @Results(Number, Name, Total1) 
select number, name, sum(total) 
from table1 
group by number, name 

update @Results 
set total2 = total 
from 
(select number, sum(total) from table2) s 
where s.number = number 

select from @results 

Cependant, le Générateur de rapports ne cesse de demander pour entrer une valeur pour la variable @Results. C'est tout à fait possible? Comme suggéré par KM, j'ai utilisé une procédure stockée pour résoudre mon problème immédiat, mais la question initiale est toujours la suivante: puis-je utiliser les variables @table dans le Générateur de rapports?

Répondre

4

n °

ReportBuilder se

  1. 2 vous deviner
  2. traite @results comme paramètre
+0

Merci. J'avais peur de cette réponse :) – edosoft

2

Mettez tout cela dans une procédure stockée et demandez au générateur de rapports d'appeler cette procédure. Si vous avez beaucoup de lignes à traiter, vous pourriez être mieux (performance sage) avec une table #temp où vous créez une clé primaire en cluster sur Number (ou serait-ce Number + Name, pas sûr de votre exemple de code).

EDIT
vous pouvez essayer de faire tout en un SELECT et envoyer que pour signaler le constructeur, cela devrait être le plus rapide (pas de tables temporaires):

select 
    dt.number, dt.name, dt.total1, s.total2 
    from (select 
       number, name, sum(total) AS total1 
       from table1 
       group by number, name 
     ) dt 
     LEFT OUTER JOIN (select 
          number, sum(total) AS total2 
          from table2 
          GROUP BY number --<<OP code didn't have this, but is it needed?? 
         ) s ON dt.number=s.number 
+0

Merci. J'ai considéré cette option mais j'étais toujours curieux si je pouvais utiliser une variable @table. – edosoft

0

Pourquoi ne pas simplement UNION les deux resultsets?

0

Que diriez-vous en utilisant une fonction table plutôt qu'une procédure stockée?

1

Vous pouvez utiliser Tableau des variables dans la requête de jeu de données SSRS comme dans mon code où je suis en ajoutant nécessaires « vides » records pour le pied de page de groupe donjon en postion fixe (exemple d'utilisation pubs base de données):

 
DECLARE @NumberOfLines INT 
DECLARE @RowsToProcess INT 
DECLARE @CurrentRow INT 
DECLARE @CurRow INT 
DECLARE @cntMax INT 
DECLARE @NumberOfRecords INT 
DECLARE @SelectedType char(12) 
DECLARE @varTable TABLE (# int, type char(12), ord int) 
DECLARE @table1 TABLE (type char(12), title varchar(80), ord int)
DECLARE @table2 TABLE (type char(12), title varchar(80), ord int)

INSERT INTO @varTable SELECT count(type) as '#', type, count(type) FROM titles GROUP BY type ORDER BY type SELECT @cntMax = max(#) from @varTable

INSERT into @table1 (type, title, ord) SELECT type, N'', 1 FROM titles INSERT into @table2 (type, title, ord) SELECT type, title, 1 FROM titles

SET @CurrentRow = 0 SET @SelectedType = N'' SET @NumberOfLines = @RowsPerPage

SELECT @RowsToProcess = COUNT(*) from @varTable

WHILE @CurrentRow < @RowsToProcess BEGIN
SET @CurrentRow = @CurrentRow + 1

SELECT TOP 1 @NumberOfRecords = ord, @SelectedType = type FROM @varTable WHERE type > @SelectedType SET @CurRow = 0 WHILE @CurRow < (@NumberOfLines - @NumberOfRecords % @NumberOfLines) % @NumberOfLines BEGIN SET @CurRow = @CurRow + 1 INSERT into @table2 (type, title, ord) SELECT type, '' , 2 FROM @varTable WHERE type = @SelectedType END END SELECT type, title FROM @table2 ORDER BY type ASC, ord ASC, title ASC
0

Je J'ai vu ce problème aussi. Il semble que SQLRS soit un peu sensible à la casse. Si vous vous assurez que votre variable de table est déclarée et référencée partout avec la même lettre, vous allez effacer l'invite pour le paramètre.

Questions connexes