복붙노트

[SQL] SQL 서버 SELECT INTO의 @variable?

SQL

SQL 서버 SELECT INTO의 @variable?

나는 완벽하게 정상적으로 실행 제는 SQL (2008) procs 저장 중 하나에 다음과 같은 코드가 있습니다 :

    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 문을 통해 그들의 각 하나를 초기화하고 싶지 않아요, 위의 문을 사용하여 착용감을 던졌습니다!

같은 테이블에 대해 여러 쿼리없이 라인을 따라 뭔가를 달성하는 방법에 대한 어떤 제안?

해결법

  1. ==============================

    1.당신은 ... INTO ... 테이블 변수를 선택할 수 없습니다. 당신이 할 수있는 최선은 삽입 후, 먼저 만드는 것입니다. 귀하의 두번째 조각은이어야한다

    당신은 ... INTO ... 테이블 변수를 선택할 수 없습니다. 당신이 할 수있는 최선은 삽입 후, 먼저 만드는 것입니다. 귀하의 두번째 조각은이어야한다

    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
    
  2. ==============================

    2.당신은 단순히 나중에 사용하기 위해 몇 가지 변수를 할당하고 싶다면, 당신은이 라인을 따라 뭔가 한 번에 그 작업을 수행 할 수 있습니다 :

    당신은 단순히 나중에 사용하기 위해 몇 가지 변수를 할당하고 싶다면, 당신은이 라인을 따라 뭔가 한 번에 그 작업을 수행 할 수 있습니다 :

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

    그 물건의 종류가 있다면 당신은 뒤에있어

  3. ==============================

    3.당신은이 작업을 수행 할 수 있습니다

    당신은이 작업을 수행 할 수 있습니다

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

    나중에

    SELECT CustomerId FROM #tempCustomer
    

    당신은 #tempCustomer의 구조를 선언 할 필요가 없습니다

  4. ==============================

    4.당신의 구문이 약간 밖으로 것 같습니다. 이것은 좋은 예제를 가지고

    당신의 구문이 약간 밖으로 것 같습니다. 이것은 좋은 예제를 가지고

    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
    
  5. ==============================

    5.당신 같은 소리는 임시 테이블을합니다. http://www.sqlteam.com/article/temporary-tables

    당신 같은 소리는 임시 테이블을합니다. http://www.sqlteam.com/article/temporary-tables

    #TempTable 당신의 SP에 걸쳐 사용할 수 있다는 점에 유의하십시오.

    ## TEMPTABLE 모두에 사용할 수 있습니다.

  6. ==============================

    6.저도 같은 문제에 대한 해결책을 찾고 질문을 발견; 어떤 다른 답변이 점에 실패하는 것은 일시적인없는, 영구적 인 형태로 프로 시저의 모든 실행을 위해 테이블의 이름을 변경하는 변수를 사용하는 방법입니다.

    저도 같은 문제에 대한 해결책을 찾고 질문을 발견; 어떤 다른 답변이 점에 실패하는 것은 일시적인없는, 영구적 인 형태로 프로 시저의 모든 실행을 위해 테이블의 이름을 변경하는 변수를 사용하는 방법입니다.

    지금까지 내가 무엇을 사용하는 변수와 전체 SQL 코드를 연결할. 이 같이 :

    declare @table_name as varchar(30)
    select @table_name = CONVERT(varchar(30), getdate(), 112)
    set @table_name = 'DAILY_SNAPSHOT_' + @table_name
    
    EXEC('
            SELECT var1, var2, var3
            INTO '+@table_name+'
            FROM my_view
            WHERE string = ''Strings must use double apostrophe''
        ');
    

    난 당신이 더 나은 방법을 발견했습니다 만약 그렇다면, 코드가 너무 큰 경우는 성가신 될 수 그것은 도움이되기를 바랍니다 만, 제발 공유!

  7. ==============================

    7.

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

    어떤 수단 새로운 @tempCustomer의 tablevariable을 작성하고 고객으로부터 데이터를 삽입. 당신은 이미 다시 선언하는 필요가 없습니다 그래서 위를 선언했다. 더 나은로 이동합니다

    INSERT INTO @tempCustomer SELECT * FROM Customer
    
  8. from https://stackoverflow.com/questions/4823880/sql-server-select-into-variable by cc-by-sa and MIT license