tutorial transact for examples espaƱol ejemplos documentacion sql sql-server tsql sql-server-2008

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



"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