Wiele razy muszę pisać coś takiego, gdy mam do czynienia z programem SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Ale utworzenie tabeli, która ma dokładną składnię w wyniku procedury składowanej, jest żmudnym zadaniem. Na przykład wynik sp_helppublication ma 48 kolumn! Chcę wiedzieć, czy jest na to łatwy sposób.
Dzięki.
sql-server
t-sql
stored-procedures
Tylko uczeń
źródło
źródło
Odpowiedzi:
Jeśli procedura zwraca tylko jeden zestaw wyników, a opcja zapytań rozproszonych ad hoc jest włączona.
Lub możesz skonfigurować serwer z pętlą zwrotną i używać go zamiast tego.
źródło
SET FMT_ONLY ON
?W SQL Server 2012 i nowszych wersjach można używać
sys.dm_exec_describe_first_result_set
lokalnie, zakładając, że zestaw wyników, którego szukasz, jest pierwszym wynikiem:Wynik:
Uwaga: istnieje ograniczenie: jeśli procedura składowana tworzy tabele #temp, funkcja metadanych nie działa. Dlatego nie użyłem sp_who2. :-)
źródło
SELECT @sql += *expression*
składnia jest gdzieś udokumentowana? należyORDER BY
włączyć, aby był stabilny?ORDER BY
wiadomo, że czyni to mniej stabilnym . Jeśli chcesz wyników w przewidywalny aby użyćFOR XML PATH
lub, jeżeli na wystarczająco nowej wersji SQL ServerSTRING_AGG
.+=
... ciąg+=
jest tutaj udokumentowany . Ale dziękuję!Nie. Wynik procedury przechowywanej może się znacznie różnić: nie jest zaprojektowany tak, aby zawsze zwracał dokładnie jeden zestaw wyników jak SELECT dla jakiegoś obiektu.
Państwo musi wykonać CREATE TABLE
źródło
Napiszę procedurę generowania tabeli dla mnie:
Następnie zadzwoń za pomocą:
Uwaga : zastąp „YOUR_PROCEDURE_NAME_HERE” nazwą własnej procedury składowanej.
Uwaga : zastąp YOUR_TABLE_NAME_HERE wybraną nazwą tabeli.
Powyższe wygeneruje coś takiego:
źródło