Tengo el siguiente código en uno de mis Sql (2008) Stored Procs 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 en la línea de:
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 se ajusta a la declaración anterior, sin embargo, no quiero tener que crear variables separadas e inicializar cada una de ellas a través de una declaración SELECT separada en la misma tabla ... ¡¡¡UGH !!!
¿Alguna sugerencia sobre cómo lograr algo similar sin múltiples consultas en la misma tabla?
sql
sql-server
tsql
sql-server-2008
Bleepzter
fuente
fuente
declare @t table
una vez, y si necesita reutilizarlo, dispare unDELETE @TempCustomer
antes de insertarlo nuevamenteRespuestas:
No puede SELECCIONAR ... EN ... una TABLA VARIABLE. Lo mejor que puede hacer es crearlo primero, luego insertarlo. Tu segundo fragmento tiene que ser
fuente
Si desea simplemente asignar algunas variables para su uso posterior, puede hacerlas de una sola vez con algo en esta línea:
Si ese es el tipo de cosas que buscas
fuente
Puedes hacerlo:
Entonces despúes
no necesita declarar la estructura de #tempCustomer
fuente
DROP TABLE #tempCustomer
cuando#tempCustomer
ya no se necesita otra manera la próxima seleccione provocará un#tempCustomer already exists
errorParece que su sintaxis está ligeramente fuera. Esto tiene algunos buenos ejemplos.
Entonces despúes
fuente
Parece que quieres tablas temporales. http://www.sqlteam.com/article/temporary-tables
Tenga en cuenta que #TempTable está disponible en todo su SP.
Tenga en cuenta que ## TempTable está disponible para todos.
fuente
Encontré su pregunta buscando una solución al mismo problema; y lo que otras respuestas no señalan es una forma de usar una variable para cambiar el nombre de la tabla para cada ejecución de su procedimiento en forma permanente, no temporal.
Hasta ahora, lo que hago es concatenar todo el código SQL con las variables a utilizar. Me gusta esto:
Espero que ayude, pero podría ser engorroso si el código es demasiado grande, así que si has encontrado una mejor manera, ¡comparte!
fuente
Lo que significa crear una nueva
@tempCustomer
variable de tabla e insertar datos del cliente. Ya lo había declarado anteriormente, así que no es necesario volver a declararlo. Mejor ir confuente