2013-08-12 2 views
0

아래와 같이 외부에서 참조되는 내부 쿼리가 있습니다.SQL Server 내부 쿼리에 테이블 만들기

첫 번째 경우는 예상대로 잘 작동하지만 두 번째 경우는 실패합니다. 두 번째 경우에 대한 해결 방법이 있습니까?

나중에 디버깅 목적으로 내부 쿼리 결과 세트가 필요한 비슷한 설정이 있습니다.

첫 번째의 경우

select * from 
(select 1 col1) tb1 

두 번째 경우

select * from 
(select 1 col1 into x_table) tb1 
+0

두 경우가 동일하지 않습니다. 첫 번째에는 삽입이 없습니다. – Amy

답변

1

당신은 이러한 솔루션 중 하나를 시도 할 수 :

SET NOCOUNT ON; 
GO 
CREATE TABLE dbo.MyTable(
EntryDate DATE NOT NULL, 
Emptied BIT NOT NULL 
); 
GO 
INSERT INTO dbo.MyTable (EntryDate,Emptied) 
VALUES 
('2013-01-01',0), 
('2013-01-02',0), 
('2013-01-03',1); 

-- Solution #1 (SQL2005+) 
DECLARE @Output1 TABLE(
    EntryDate DATE NOT NULL, 
    Emptied BIT NOT NULL 
); 
INSERT INTO dbo.MyTable (EntryDate,Emptied) 
OUTPUT inserted.* INTO @Output1(EntryDate,Emptied) 
SELECT '2013-01-04',0 
UNION ALL 
SELECT '2013-01-05',0; 
PRINT 'Solution #1: @Output1 content' 
SELECT * FROM @Output1; 


-- Solution #2 (SQL2008+) 
DECLARE @Output2 TABLE(
    EntryDate DATE NOT NULL, 
    Emptied BIT NOT NULL 
); 
INSERT INTO @Output2(EntryDate,Emptied) 
SELECT * 
FROM 
(
    INSERT INTO dbo.MyTable (EntryDate,Emptied) 
    OUTPUT inserted.* 
    VALUES 
    ('2013-01-06',1), 
    ('2013-01-07',0), 
    ('2013-01-08',0), 
    ('2013-01-09',1) 
)x 
PRINT 'Solution #2: @Output2 content' 
SELECT * FROM @Output2; 

결과 :

/* 
Solution #1: @Output1 content 
EntryDate Emptied 
---------- ------- 
2013-01-04 0 
2013-01-05 0 

Solution #2: @Output2 content 
EntryDate Emptied 
---------- ------- 
2013-01-06 1 
2013-01-07 0 
2013-01-08 0 
2013-01-09 1 
*/ 
관련 문제