SQL Server SELECT INTO @variable?
我在我的一个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
所以你们的问题是有可能做一些事情:
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抛出一个适合上述语句,但是我不想创build单独的variables,并通过一个单独的SELECT语句对同一个表进行初始化。
任何build议如何实现沿线的东西没有多个查询对同一个表?
你不能SELECT .. INTO .. TABLE VARIABLE。 你可以做的最好的是先创build它,然后插入它。 你的第二个片段必须是
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
如果你想简单地分配一些variables供以后使用,你可以用下面的代码一次性完成:
declare @var1 int,@var2 int,@var3 int; select @var1 = field1, @var2 = field2, @var3 = field3 from table where condition
如果那是你所追求的东西
你可以这样做:
SELECT CustomerId, FirstName, LastName, Email INTO #tempCustomer FROM Customer WHERE CustomerId = @CustomerId
然后再
SELECT CustomerId FROM #tempCustomer
你不需要声明#tempCustomer的结构
它看起来像你的语法略微。 这有一些很好的例子
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
然后呢
SELECT CustomerId FROM @TempCustomer
听起来像你想临时表。 http://www.sqlteam.com/article/temporary-tables
请注意#TempTable在整个SP中都可用。
请注意,## TempTable适用于所有人。
"SELECT * INTO @TempCustomer FROM Customer WHERE CustomerId = @CustomerId"
这意味着创build一个新的@tempCustomer
variables并插入数据从客户。 你已经在上面声明了,所以不需要再声明。 最好跟着走
INSERT INTO @tempCustomer SELECT * FROM Customer