Eu tenho o seguinte código em um dos meus Sql (2008) Stored Procs que executa perfeitamente:
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
Portanto, a pergunta para vocês é que existe a possibilidade de fazer 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 eu pudesse reutilizar esses dados da memória em outras declarações a seguir? O SQL Server se encaixa com a instrução acima, porém não quero criar variáveis separadas e inicializar cada uma delas por meio de uma instrução SELECT separada na mesma tabela ... UGH !!!
Alguma sugestão sobre como conseguir algo nesse sentido sem várias consultas na mesma tabela?
sql
sql-server
tsql
sql-server-2008
bleepzter
fonte
fonte
declare @t table
uma vez, e se você precisa de reutilizá-lo, disparar umDELETE @TempCustomer
antes de inserir-lo novamenteRespostas:
Você não pode SELECIONAR .. EM .. uma TABELA VARIÁVEL. O melhor que você pode fazer é criá-lo primeiro e depois inseri-lo. Seu segundo snippet precisa ser
fonte
Se você quiser simplesmente atribuir algumas variáveis para uso posterior, você pode fazê-las de uma só vez com algo ao longo destas linhas:
Se esse é o tipo de coisa que você procura
fonte
você consegue fazer isso:
depois
você não precisa declarar a estrutura de #tempCustomer
fonte
DROP TABLE #tempCustomer
quando#tempCustomer
não for mais necessário, caso contrário, a próxima seleção causará um#tempCustomer already exists
erro.Parece que sua sintaxe está um pouco fora. Isso tem alguns bons exemplos
Depois
fonte
Parece que você quer tabelas temporárias. http://www.sqlteam.com/article/temporary-tables
Observe que #TempTable está disponível em todo o seu SP.
Observe que o ## TempTable está disponível para todos.
fonte
Encontrei sua pergunta procurando uma solução para o mesmo problema; e que outras respostas falham em apontar é uma maneira de usar uma variável para alterar o nome da tabela para cada execução de seu procedimento de forma permanente, não temporária.
Até agora, o que faço é concatenar todo o código SQL com as variáveis a serem usadas. Como isso:
Espero que ajude, mas pode ser complicado se o código for muito grande, por isso, se você encontrou uma maneira melhor, compartilhe!
fonte
O que significa criar uma nova
@tempCustomer
variável de tabela e inserir dados do cliente. Você já o havia declarado acima, portanto não há necessidade de declarar novamente. Melhor ir comfonte