Chèn dữ liệu vào bảng Temp với truy vấn


144

Tôi có một truy vấn hiện có xuất dữ liệu hiện tại và tôi muốn chèn nó vào bảng Temp, nhưng đang gặp một số vấn đề. Bất cứ ai cũng có một cái nhìn sâu sắc về làm thế nào để làm điều này?

Đây là một ví dụ

SELECT *
FROM  (SELECT Received,
              Total,
              Answer,
              ( CASE
                  WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                END ) AS application
       FROM   FirstTable
       WHERE  Recieved = 1
              AND application = 'MORESTUFF'
       GROUP  BY CASE
                   WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                 END) data
WHERE  application LIKE isNull('%MORESTUFF%', '%') 

Điều này dường như xuất dữ liệu của tôi hiện tại theo cách mà tôi cần, nhưng tôi muốn chuyển nó vào Bảng tạm thời. Vấn đề của tôi là tôi khá mới đối với Truy vấn SQL và chưa thể tìm ra cách để làm như vậy. Hoặc nếu nó thậm chí có thể. Nếu không thể, có cách nào tốt hơn để lấy dữ liệu mà tôi đang tìm kiếm trong WHERE application LIKE isNull('%MORESTUFF%','%')một bảng tạm thời không?


2
Trong một #tempbảng đã tồn tại hoặc nó sẽ cần phải tạo một bảng mới?
Martin Smith

1
@MartinSmith - Nó sẽ là một cái mới.
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')sẽ luôn giống như vậy LIKE '%MORESTUFF%', phải không? Vì '% MORESTUFF%' (chuỗi ký tự) không bao giờ là null?
gnud

Câu trả lời:


187
SELECT *
INTO #Temp
FROM

  (SELECT
     Received,
     Total,
     Answer,
     (CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) AS application
   FROM
     FirstTable
   WHERE
     Recieved = 1 AND
     application = 'MORESTUFF'
   GROUP BY
     CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) data
WHERE
  application LIKE
    isNull(
      '%MORESTUFF%',
      '%')

148

SQL Server R2 2008 cần ASmệnh đề như sau:

SELECT * 
INTO #temp
FROM (
    SELECT col1, col2
    FROM table1
) AS x

Truy vấn thất bại mà không có AS xở cuối.


BIÊN TẬP

Nó cũng cần thiết khi sử dụng SS2016, phải thêm as tvào cuối.

 Select * into #result from (SELECT * FROM  #temp where [id] = @id) as t //<-- as t

5
Hấp dẫn. Tôi chỉ có vấn đề tương tự. Thêm "As [x]" vào cuối khiến mọi thứ hoạt động tốt. Tại sao lại thế này?
Godfathr

5
@godfathr đó là vì mệnh đề from đang sử dụng bảng dẫn xuất
wootscootinboogie

35

Cách nhanh nhất để làm điều này là sử dụng lệnh "CHỌN VÀO", vd

SELECT * INTO #TempTableName
FROM....

Điều này sẽ tạo một bảng mới, bạn không phải tạo trước nó.


Có thể thêm các cột vào #TempTableName không?
FrenkyB

@FrenkyB có, một khi bảng được tạo, bạn có thể sử dụng câu lệnh ALTER TABLE ADD COLUMN
Yuriy Galanter

12

Cá nhân, tôi cần một bàn tay nhỏ bé tìm ra cách sử dụng nó và nó thực sự, tuyệt vời.

IF(OBJECT_ID('tempdb..#TEMP') IS NOT NULL) BEGIN DROP TABLE #TEMP END
        SELECT *
            INTO #TEMP
            FROM (
            The query you want to use many times
            ) AS X

SELECT * FROM #TEMP WHERE THIS = THAT
SELECT * FROM #TEMP WHERE THIS <> THAT
SELECT COL1,COL3 FROM #TEMP WHERE THIS > THAT

DROP TABLE #TEMP

8

Bạn có thể làm điều đó như thế này:

INSERT INTO myTable (colum1, column2)
SELECT column1, column2 FROM OtherTable;

Chỉ cần đảm bảo các cột khớp nhau, cả về số lượng như trong kiểu dữ liệu.


5

Thử cái này:

SELECT *
INTO #Temp
FROM 
(select * from tblorders where busidate ='2016-11-24' and locationID=12
) as X

Vui lòng sử dụng bí danh với x để nó không bị lỗi tập lệnh và kết quả.


3
SELECT * INTO #TempTable 
FROM SampleTable
WHERE...

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Điều này là khả thi. Hãy thử cách này:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.