eksport selecta do Exela przy niewiadomej liczbie kolumn

0

Cześć,

Opis zagadnienia:
Potrzebuję stworzyć procedurę, która zapisze rezultat zapytania do pliku Excel. Liczba kolumn w zapytaniu i ich nazwy są różne. Pracuję na MS SQL Server 2017.

Co próbuję zrobić:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\Zestawienia\Zestawienie1.xlsx;','SELECT * FROM [Arkusz1$]') SELECT * FROM tabela

Trudności:
Powyższy insert wymaga, aby w pliku xlsx były wpisane kolumny, a ich nazwy muszą być takie same jak te zwracane przez select. Pytanie, czy istnieje możliwość z pozycji kodu zaprogramowania procedury tak, aby tworzyła nowy plik i uzupełniała go o wartości z rezultatu zapytania? Nie mam możliwości sprawdzenia, czy select zwróci 3 kolumny czy 10.

Przykład działania:
Select * from tabela zwraca :

ID NAME POWER
1 test1 100
2 test2 150
3 test3 50

Otrzymujemy excel
utworzony plik.PNG

Czy macie może pomysł, w jaki sposób mogę wyeksportować rezultat zapytania do excela?

0

Na tym bazowałem, jednakże z poziomu kodu sql jest opis wyłącznie dla statycznej liczby określonych kolumn.

0

Ale jak o zmiennej ilości kolumn? Tabele się na serwerze zmieniają w czasie rzeczywistym, czy po prostu dla niektórych wierszy masz wartości nullowe?

0

Docelowo pragnę stworzyć procedurę(kod), która przyjmie w parametrze **dowolny ** select na bazę(varchar) i wygeneruje plik excel z danymi zwracanymi przez selecta. Pytanie czy mogę utworzyć i uzupełnić pusty plik excel bez dodatkowego kodowania.

Znalazłem sposób, link który to spełnia, wymaga jednak RStudio i dodatkowych elementów, których w rozwiązaniu wolałbym uniknąć. Dlatego szukam sposobu na zrobienie tego z poziomu kodu sql.

0

A nie prościej kopiować od strony Excela, to zaledwie kilka linijek w vba...

Generalnie nie wyeksportujesz danych jeżeli nazwy kolumn nie bedą sie zgadzać, rozwiazania z bcp polegaja na generowaniu CSV i otwieraniu w excelu.

0

A nie da się najpierw pociągnąć schematu tabeli i na jej podstawie stworzyć tego w Excelu i potem pociągnąć do niego dane?

0

Dzięki za odpowiedzi. Pójdę tą drogą. Jeżeli coś jeszcze znajdę to uzupełnię temat. Udanego weekendu

1 użytkowników online, w tym zalogowanych: 0, gości: 1