Skocz do zawartości

Raport własny SQL, z zastosowanie tablicy tymczasowej

Polecane posty

Jeden z klientów wymyślił na tyle skomplikowany raport SQL, że musiałem w nim zastosować tablicę tymczasową. Zgodnie ze znanymi mi metodami, przygotowałem Sobie zapytania, które bez problemu działają w standardowym menadżerze SQL. Oczywiście w międzyczasie wkleiłem kod do edycji raportu NEXO i także przeszedł poprawnie walidację, ale ... podczas uruchamiana raportu, pojawia się błąd:

obraz.png.b6baf994a291755eb4903fec830f4bbb.png

Link to postu

Potwierdzam problem.

Doraźnie można zastąpić tabelę tymczasową "zwykłą" tabelą, którą w treści raportu przed wyliczeniem można czyścić,  np. jakoś tak:

Tworzenie tabeli roboczej (np. w Management Studio)

CREATE TABLE dbo.RoboczaTabelaRaportu
(
	ID INT NOT NULL,
	Tekst NVARCHAR(50), 
)

i w raporcie:

-- "Czyszczenie" tabeli roboczej
TRUNCATE TABLE dbo.RoboczaTabelaRaportu

-- Wypełnianie
INSERT INTO RoboczaTabelaRaportu VALUES(1, 'A')
INSERT INTO RoboczaTabelaRaportu VALUES(2, 'B')
INSERT INTO RoboczaTabelaRaportu VALUES(3, 'C')

-- Zapytanie
SELECT * FROM dbo.RoboczaTabelaRaportu

Problem z tabelą tymczasową wynika z tego, że raport SQL przed uruchomieniem sprawdza strukturę zapytania, bez wykonywania go (używa flagi SET FMTONLY ON), co powoduje, że tabela tymczasowa nie powstaje. Stąd komunikat błędu.

 

Można rozważyć również zastąpienie tabeli tymczasowej zmienną tabelaryczną. Zapytanie w raporcie mogło by  wyglądać tak:

DECLARE @MyT TABLE 
(
	ID INT NOT NULL,
	Tekst NVARCHAR(50)
)
;

INSERT INTO @MyT VALUES(1, 'A')
INSERT INTO @MyT VALUES(2, 'B')
INSERT INTO @MyT VALUES(3, 'C')

SELECT * FROM @MyT

 

Edytowane przez Jerzy Dudra
Rozbudowanie odpowiedzi
Link to postu

Nie ukrywam, że rozwiązanie z tabelą tymczasową, ma dwie przewagi, względem proponowanych przez Pana rozwiązań, które zresztą miałem w planie awaryjnym:

- nie muszę ingerować w bazę klienta, tym bardziej, że pracuję z nim zdalnie, a zdecydowanie łatwiej wytłumaczyć wklejeni kodu do okna raportu, niż odpalenie Managment Studio i tworzenie rekordów.

- zmienna tebelaryczna, to rozwiązanie, w które planowałem awaryjnie iść, jedyne co, to lenistwo deklarowania na etapie projektowania raportu mnie zniechęciło, bo tymczasowej nie muszę tak mocno deklarować ;)

Pytanie, czy problem planujecie rozwiązywać na przyszłość, czy to raczej zawracanie gitary z mojej strony i dostosować się do pisania raportów bez tablic tymczasowych?

Link to postu
×
×
  • Dodaj nową pozycję...