首页 文章

SQL Server SELECT INTO @variable?

提问于
浏览
206

我在我的一个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 回答

  • 430

    如果你想简单地指定一些变量供以后使用,你可以一次性完成这些变换:

    declare @var1 int,@var2 int,@var3 int;
    
    select 
        @var1 = field1,
        @var2 = field2,
        @var3 = field3
    from
        table
    where
        condition
    

    如果那是你追求的东西

  • 24

    你不能SELECT .. INTO ..一个表VARIABLE . 您可以做的最好是先创建它,然后插入它 . 你的第二个片段必须是

    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
    
  • 14

    你可以这样做:

    SELECT 
        CustomerId, 
        FirstName, 
        LastName, 
        Email
    INTO #tempCustomer 
    FROM 
        Customer
    WHERE 
        CustomerId = @CustomerId
    

    然后

    SELECT CustomerId FROM #tempCustomer
    

    你不需要声明#tempCustomer的结构

  • 182
    "SELECT *
      INTO 
        @TempCustomer 
    FROM 
        Customer
    WHERE 
        CustomerId = @CustomerId"
    

    这意味着创建一个新的 @tempCustomer tablevariable并从Customer插入数据 . 你已经在上面宣布它,所以不需要再次声明 . 最好配合

    INSERT INTO @tempCustomer SELECT * FROM Customer
    
  • -1

    看起来您的语法稍微有点过了 . 这有一些good examples

    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
    
  • 2

    听起来你想要临时表 . http://www.sqlteam.com/article/temporary-tables

    请注意,#TempTable可在整个SP中使用 .

    注意## TempTable可供所有人使用 .

相关问题