1. ホーム
  2. sql

[解決済み】SQL Server SELECT INTO @variable?

2022-03-30 19:09:24

質問

Sql (2008) Stored Procsの1つに以下のコードがあり、完全に正常に実行されています。

    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は上記のステートメントで怒りますが、私は別々の変数を作成し、同じテーブルに対して別々のSELECTステートメントを介してそれらの各々を初期化する必要はありません......。ううう......。

同じテーブルに対して複数のクエリを実行することなく、この線に沿って何かを達成する方法について、何か提案はありますか?

どのように解決するのですか?

SELECT ... INTO ... a TABLE VARIABLEはできません。一番良いのは、最初にテーブルを作成し、そこに挿入することです。 2番目のスニペットは次のようになります。

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