Ich habe den folgenden Code in einem meiner gespeicherten SQL (2008) -Prozesse, der einwandfrei ausgeführt wird:
CREATE PROCEDURE [dbo].[Item_AddItem]
@CustomerId uniqueidentifier,
@Description nvarchar(100),
@Type int,
@Username nvarchar(100),
AS
BEGIN
DECLARE @TopRelatedItemId uniqueidentifier;
SET @TopRelatedItemId =
(
SELECT top(1) RelatedItemId
FROM RelatedItems
WHERE CustomerId = @CustomerId
)
DECLARE @TempItem TABLE
(
ItemId uniqueidentifier,
CustomerId uniqueidentifier,
Description nvarchar(100),
Type int,
Username nvarchar(100),
TimeStamp datetime
);
INSERT INTO Item
OUTPUT INSERTED.* INTO @TempItem
SELECT NEWID(), @CustomerId, @Description, @Type, @Username, GETDATE()
SELECT
ItemId,
CustomerId,
@TopRelatedItemId,
Description,
Type,
Username,
TimeStamp
FROM
@TempItem
END
GO
Die Frage für euch ist also, ob es eine Möglichkeit gibt, etwas in der Art von:
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
Damit ich diese Daten aus dem Speicher in anderen folgenden Anweisungen wiederverwenden kann? SQL Server löst eine Anpassung mit der obigen Anweisung aus, ich möchte jedoch keine separaten Variablen erstellen und jede einzelne über eine separate SELECT-Anweisung für dieselbe Tabelle initialisieren müssen .... UGH !!!
Irgendwelche Vorschläge, wie Sie etwas in dieser Richtung erreichen können, ohne mehrere Abfragen für dieselbe Tabelle durchzuführen?
sql
sql-server
tsql
sql-server-2008
bleepzter
quelle
quelle
declare @t table
einmal, und wenn Sie es wiederverwenden müssen, feuern Sie ein,DELETE @TempCustomer
bevor Sie es wieder einsetzenAntworten:
Sie können nicht .. IN .. eine TABELLE VARIABLE AUSWÄHLEN. Das Beste, was Sie tun können, ist, es zuerst zu erstellen und dann einzufügen. Dein 2. Snippet muss sein
quelle
Wenn Sie einfach einige Variablen für die spätere Verwendung zuweisen möchten, können Sie sie auf einmal mit etwas in dieser Richtung ausführen:
Wenn das die Art von Dingen ist, nach denen Sie suchen
quelle
du kannst das:
dann später
Sie müssen die Struktur von #tempCustomer nicht deklarieren
quelle
DROP TABLE #tempCustomer
Wann hinzuzufügen,#tempCustomer
das nicht mehr benötigt wird, da sonst die nächste Auswahl einen#tempCustomer already exists
Fehler verursachtEs sieht so aus, als ob Ihre Syntax etwas falsch ist. Dies hat einige gute Beispiele
Dann später
quelle
Klingt so, als ob Sie temporäre Tabellen möchten. http://www.sqlteam.com/article/temporary-tables
Beachten Sie, dass #TempTable in Ihrem SP verfügbar ist.
Beachten Sie, dass die ## TempTable für alle verfügbar ist.
quelle
Ich fand Ihre Frage auf der Suche nach einer Lösung für das gleiche Problem. und was andere Antworten nicht zeigen, ist eine Möglichkeit, eine Variable zu verwenden, um den Namen der Tabelle für jede Ausführung Ihrer Prozedur in einer permanenten Form zu ändern, nicht in einer temporären.
Bisher verkette ich den gesamten SQL-Code mit den zu verwendenden Variablen. So was:
Ich hoffe, es hilft, aber es könnte umständlich sein, wenn der Code zu groß ist. Wenn Sie also einen besseren Weg gefunden haben, teilen Sie ihn bitte mit!
quelle
@tempCustomer
Dies bedeutet, dass eine neue Tabellenvariable erstellt und Daten vom Kunden eingefügt werden. Sie hatten es bereits oben deklariert, sodass Sie es nicht erneut deklarieren müssen. Besser mit zu gehenquelle