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议如何实现沿线的东西没有多个查询对同一个表?

6 Solutions collect form web for “SQL Server SELECT INTO @variable?”

你不能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一个新的@tempCustomervariables并插入数据从客户。 你已经在上面声明了,所以不需要再声明。 最好跟着走

 INSERT INTO @tempCustomer SELECT * FROM Customer 
  • 在存储过程中执行存储过程
  • 定义与IN运算符一起使用的variables(T-SQL)
  • 从SQL Server函数返回多个值
  • 为查询string声明variables
  • 使用连接的SQL更新查询
  • testing列存在,添加列和更新列
  • 找不到列“dbo”或用户定义的函数或聚合“dbo.Splitfn”,或名称不明确
  • 有没有办法循环通过TSQL中的表variables,而不使用游标?
  • 事务隔离级别范围
  • ')'用GETDATE调用storedproc时语法不正确
  • INNER JOIN可以提供比EXISTS更好的性能