Mam następujący kod w jednym z moich przechowywanych procesów Sql (2008), który wykonuje się doskonale:
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
Zatem dla was pytanie brzmi, czy istnieje możliwość zrobienia czegoś w stylu:
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
Żebym mógł ponownie wykorzystać te dane z pamięci w innych poniższych instrukcjach? SQL Server rzuca dopasowanie z powyższą instrukcją, jednak nie chcę tworzyć osobnych zmiennych i inicjować każdej z nich za pomocą osobnej instrukcji SELECT dla tej samej tabeli .... UGH !!!
Jakieś sugestie, jak osiągnąć coś wzdłuż linii bez wielu zapytań do tej samej tabeli?
sql
sql-server
tsql
sql-server-2008
bleepzter
źródło
źródło
declare @t table
raz, a jeśli chcesz go ponownie użyć, odpalDELETE @TempCustomer
przed włożeniem go ponownieOdpowiedzi:
Nie można WYBIERAĆ… DO… ZMIENNEJ TABELI. Najlepsze, co możesz zrobić, to najpierw utworzyć, a następnie wstawić. Twój drugi fragment kodu musi być
źródło
Jeśli chcesz po prostu przypisać niektóre zmienne do późniejszego wykorzystania, możesz to zrobić za jednym razem, używając czegoś wzdłuż tych linii:
Jeśli tego właśnie szukasz
źródło
możesz to zrobić:
potem
nie musisz deklarować struktury #tempCustomer
źródło
DROP TABLE #tempCustomer
#tempCustomer
#tempCustomer already exists
Wygląda na to, że twoja składnia jest nieco wyłączona. To ma kilka dobrych przykładów
Potem
źródło
Wygląda na to, że chcesz mieć tabele tymczasowe. http://www.sqlteam.com/article/temporary-tables
Pamiętaj, że #TempTable jest dostępny w całym twoim SP.
Uwaga: ## TempTable jest dostępny dla wszystkich.
źródło
Znalazłem twoje pytanie, szukając rozwiązania tego samego problemu; a inne odpowiedzi, których nie można wskazać, to sposób użycia zmiennej do zmiany nazwy tabeli dla każdego wykonania procedury w stałej formie, a nie tymczasowej.
Do tej pory łączę cały kod SQL ze zmiennymi, których należy użyć. Lubię to:
Mam nadzieję, że to pomoże, ale może być kłopotliwe, jeśli kod jest zbyt duży, więc jeśli znalazłeś lepszy sposób, udostępnij!
źródło
Co oznacza utworzenie nowej
@tempCustomer
zmiennej tabeli i wstawienie danych od klienta. Zadeklarowałeś to już powyżej, więc nie musisz ponownie deklarować. Lepiej iść zźródło