SQL Server wybrać do zmiennej@?
Mam następujący kod w jednym z moich SQL (2008) przechowywane Procs, który wykonuje doskonale dobrze:
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
Więc pytanie do was brzmi, czy jest 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
Abym 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ć oddzielnych zmiennych i inicjalizować każdą z nich za pomocą oddzielnej instrukcji SELECT przeciwko ten sam stolik.... UGH!!!
Jakieś sugestie, jak osiągnąć coś wzdłuż linii bez wielu zapytań przeciwko tej samej tabeli?
6 answers
Nie można wybrać .. Do .. zmienna tabeli. Najlepsze, co możesz zrobić, to najpierw go utworzyć, a następnie wstawić do niego. Twój drugi fragment musi być
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
INSERT INTO
@TempCustomer
SELECT
CustomerId,
FirstName,
LastName,
Email
FROM
Customer
WHERE
CustomerId = @CustomerId
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-28 01:34:11
Jeśli chcesz po prostu przypisać kilka zmiennych do późniejszego wykorzystania, możesz zrobić je w jednym ujęciu z czymś w następujący sposób:
declare @var1 int,@var2 int,@var3 int;
select
@var1 = field1,
@var2 = field2,
@var3 = field3
from
table
where
condition
Jeśli tego typu rzeczy szukasz
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-30 16:35:25
Możesz to zrobić:
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO #tempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
Potem
SELECT CustomerId FROM #tempCustomer
Nie musisz deklarować struktury #tempCustomer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 00:45:04
Wygląda na to, że Twoja składnia jest nieco poza. To ma kilka dobrych przykładów
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
INSERT @TempCustomer
SELECT
CustomerId,
FirstName,
LastName,
Email
FROM
Customer
WHERE
CustomerId = @CustomerId
Potem
SELECT CustomerId FROM @TempCustomer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-28 01:34:29
Wygląda na to, że chcesz tabel tymczasowych. http://www.sqlteam.com/article/temporary-tables
Zauważ, że #TempTable jest dostępny w całym Twoim SP.
Uwaga # # kuszący jest dostępny dla wszystkich.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-28 01:35:09
"SELECT *
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId"
Co oznacza utworzenie nowej tabeli @tempCustomer
i wstawienie danych od klienta. Już to zadeklarowałeś powyżej, więc nie ma potrzeby ponownego deklarowania. Lepiej iść z
INSERT INTO @tempCustomer SELECT * FROM Customer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-08 07:07:23