SQL Server SELECCIONAR EN @variable?
Tengo el siguiente código en uno de mis Procs almacenados Sql (2008) que se ejecuta perfectamente bien:
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
Así que la pregunta para ustedes es si hay una 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 que pueda reutilizar estos datos de la memoria en otras declaraciones siguientes? SQL Server lanza un ajuste con la instrucción anterior, sin embargo, no quiero tener que crear variables separadas e inicializar cada una de ellas a través de una instrucción SELECT separada contra la la misma mesa.... UGH!!!
¿Alguna sugerencia sobre cómo lograr algo por el estilo sin múltiples consultas en la misma tabla?
6 answers
No se puede SELECCIONAR .. EN .. una VARIABLE DE TABLA. Lo mejor que puedes hacer es crearlo primero, luego insertarlo en él. Su 2do 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-28 01:34:11
Si simplemente desea asignar algunas variables para su uso posterior, puede hacerlas de una sola vez con algo en esta línea:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-30 16:35:25
Puedes hacer esto:
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO #tempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
Luego
SELECT CustomerId FROM #tempCustomer
No es necesario declarar la estructura de # tempCustomer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-30 00:45:04
Parece que su 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
Luego
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-28 01:34:29
Parece que quieres 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 ##Tentable está disponible para todos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-28 01:35:09
"SELECT *
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId"
Lo que significa crear una nueva tabla variable @tempCustomer
e insertar datos DEL Cliente. Ya lo había declarado anteriormente, así que no es necesario volver a declararlo. Mejor ir con
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-08 07:07:23