for - transact sql tutorial
SQL Server SELECT INTO @variable? (6)
Tengo el siguiente código en uno de mis Procesos almacenados de Sql (2008) que se ejecuta perfectamente:
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
Entonces, la pregunta para ustedes es si existe la posibilidad de hacer algo como:
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
¿Para poder reutilizar estos datos de la memoria en otras declaraciones siguientes? SQL Server encaja con la declaración anterior, sin embargo, no quiero tener que crear variables separadas e inicializar cada una de ellas mediante una instrucción SELECT separada en la misma tabla ... ¡¡¡UGH !!!
¿Alguna sugerencia sobre cómo lograr algo a lo largo de las líneas sin múltiples consultas en la misma tabla?
No puede SELECCIONAR ... EN .. una VARIABLE DE TABLA. Lo mejor que puedes hacer es crearlo primero, luego insertarlo. Tu segundo fragmento tiene que ser
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
Parece que tu sintaxis está ligeramente fuera. Esto tiene algunos buenos ejemplos.
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
Entonces despúes
SELECT CustomerId FROM @TempCustomer
Puedes hacerlo:
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO #tempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
Entonces despúes
SELECT CustomerId FROM #tempCustomer
no es necesario declarar la estructura de #tempCustomer
Si desea simplemente asignar algunas variables para su uso posterior, puede hacerlas de una sola vez con algo como estas:
declare @var1 int,@var2 int,@var3 int;
select
@var1 = field1,
@var2 = field2,
@var3 = field3
from
table
where
condition
Si ese es el tipo de cosa que buscas
Suena como si quisieras tablas temporales. http://www.sqlteam.com/article/temporary-tables
Tenga en cuenta que #TempTable está disponible a través de su SP.
Tenga en cuenta que el ## TempTable está disponible para todos.
"SELECT *
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId"
Lo que significa crear una nueva @tempCustomer
variables @tempCustomer e insertar datos del Cliente. Ya lo habías declarado arriba, así que no hay necesidad de declararlo de nuevo. Mejor ir con
INSERT INTO @tempCustomer SELECT * FROM Customer