Czy istnieje sposób zdefiniowania tabeli tymczasowej bez zdefiniowania jej schematu z góry?TSQL Define Temp Table (lub table variable) bez definiowania schematu?
Odpowiedz
rzeczywiście przy zmiennej stołowego, tablicę w pamięci, jest optymalnym rozwiązaniem. #table tworzy tabelę w tempach db, a tabela ## jest globalna - zarówno przy trafieniach na dysku. Weź pod uwagę spowolnienie/przebicie z liczbą transakcji.
CREATE PROCEDURE [dbo].[GetAccounts]
@AccountID BIGINT,
@Result INT OUT,
@ErrorMessage VARCHAR(255) OUT
AS
BEGIN
SET NOCOUNT ON;
SET @Result = 0
SET @ErrorMessage = ''
DECLARE @tmp_Accounts TABLE (
AccountId BIGINT,
AccountName VARCHAR(50),
...
)
INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE ...
IF @@Rowcount = 0
BEGIN
SET @ErrorMessage = 'No accounts found.'
SET @Result = 0
RETURN @Result
END
ELSE
BEGIN
SET @Result = 1
SELECT *
FROM @tmp_Accounts
END
Uwaga sposób wstawiania do tej tabeli temp.
Wadą tego jest to, że napisanie może potrwać nieco dłużej, ponieważ trzeba zdefiniować zmienną tabeli.
Polecam także program SQL Quote Analyzer firmy RedGate.
nie trzeba OPENQUERY. Wystarczy umieścić „Into #AnyTableName” między listy select i FROM jakiegokolwiek zapytania ...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
lub Wybierz * na # Temp1 z tabeli1, gdzie 0 = 1 – GernBlandston
Nie zapomnij zrobić tabeli upuść # Temp1' na końcu procedury, jeśli używasz tej metody – Matthieu
Jednak zmienna tabeli musi być zdefiniowana podczas kompilacji raczej niż biegnij, prawda? Do tego potrzebowałem dynamicznie generowanego stołu. – Jeff
Zmienna tablicowa jest zdefiniowana w sproc, którą opublikuję poniżej ... – ElHaix
Ugh, ale jest to bardzo szczegółowe, zwłaszcza, że TSQL nie ma instrukcji "Wstawiaj lub aktualizuj" ... –