Gibt es eine Möglichkeit, eine temporäre Tabelle zu definieren, ohne das Schema im Voraus zu definieren?
Tatsächlich ist die Verwendung einer Tabelle VARIABLE, einer In-Memory-Tabelle, der optimale Weg. Die Tabelle #table erstellt eine Tabelle in temp db, und die Tabelle ## ist global - beide mit Festplattentreffern. Berücksichtigen Sie die Verlangsamung/den Erfolg bei der Anzahl der Transaktionen.
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
Beachten Sie, wie Sie in diese temporäre Tabelle einfügen.
Der Nachteil dabei ist, dass das Schreiben möglicherweise etwas länger dauert, da Sie Ihre Tabellenvariable definieren müssen.
Ich würde auch SQL Prompt for Query Analyzer von RedGate empfehlen.
sie brauchen keine offenen Fragen. Setzen Sie einfach "INTO #AnyTableName" zwischen die Auswahlliste und das FROM einer Abfrage ...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
Ja, Sie können es mit erstellen
SELECT INTO ...
Sagen wir
SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )