我在我的一个Sql(2008)存储过程中有以下代码执行完全正常:
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
So the question for you guys is is there a possibility to do something along the lines of:
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
这样我可以在以下其他语句中重用内存中的这些数据? SQL Server引用了上面的语句,但是我不想创建单独的变量并通过针对同一个表的单独SELECT语句初始化它们.... UGH !!!
关于如何在没有针对同一个表的多个查询的情况下实现某些事情的任何建议?
6 回答
如果你想简单地指定一些变量供以后使用,你可以一次性完成这些变换:
如果那是你追求的东西
你不能SELECT .. INTO ..一个表VARIABLE . 您可以做的最好是先创建它,然后插入它 . 你的第二个片段必须是
你可以这样做:
然后
你不需要声明#tempCustomer的结构
这意味着创建一个新的
@tempCustomer
tablevariable并从Customer插入数据 . 你已经在上面宣布它,所以不需要再次声明 . 最好配合看起来您的语法稍微有点过了 . 这有一些good examples
然后呢
听起来你想要临时表 . http://www.sqlteam.com/article/temporary-tables
请注意,#TempTable可在整个SP中使用 .
注意## TempTable可供所有人使用 .