2011-05-23 69 views
2

嗨,當我執行下面的TSQL時,我收到下面的錯誤消息。但是,SQL語法在那裏沒有錯?SQL Server,在TSQL中創建臨時表的問題

create table #tb ([t1] tinyint, [t2] varchar(50)) 
insert into #tb values 
    (1, 'a'), 
    (2, 'b') 

消息102,級別15,狀態1,行3 附近有語法錯誤 ''。

SQL查詢窗口中沒有任何其他內容。運行SQL Server 2005

回答

6

由於jmoreno提到,該VALUES(),()語法是SQL Server的支持2008+您標記這是SQL Server 2005的

用途:

CREATE TABLE #tb ([t1] tinyint, [t2] varchar(50)) 

INSERT INTO #tb 
SELECT 1, 'a' 
UNION ALL 
SELECT 2, 'b' 

也有可能做到這一點在單個查詢,使用SELECT ... INTO clause,但臨時表不能已經存在:

SELECT * 
    INTO #tb 
    FROM (SELECT CAST(1 AS TINYINT) AS t1, 
       CAST('a' AS VARCHAR(50)) AS t2 
     UNION ALL 
     SELECT 2, 'b') x 
+1

OMG小馬我只需要upvote你的一年和一半的答案,因爲「x」。我認爲在FROM聲明結尾處必須是一個錯字,但它不是,它確實幫助我很多! – AZee 2012-12-05 05:45:09

2

試試這個:

create table #tb ([t1] tinyint, [t2] varchar(50)); 
insert into #tb ([t1], [t2]) 
values(1, 'a'), (2, 'b') 

你需要指定你插入的列。

//編輯

對不起,SQL 2005語法如下。它幾乎沒有優雅。

CREATE TABLE #tb ([t1] TINYINT, [t2] VARCHAR(50)); 
INSERT INTO #tb 
SELECT 1, 'a' 
UNION ALL 
SELECT 2, 'b' 
+0

我得到了與上面完全相同的錯誤。 – Grant 2011-05-23 23:59:26

1

你說你正在使用SQL 2005,但VALUES(),未實現的,但()語法直到2008年

+0

哦好吧,那我該如何重寫呢? – Grant 2011-05-24 00:06:39

+1

多個插入語句,或者一個select和UNION ALL。 – jmoreno 2011-05-24 00:09:23

0

貌似你試圖插入兩行,所以你需要插入的第一行,然後第二個,而不是試圖把它全部擠進一個:

CREATE TABLE #tb ([t1] TINYINT, [t2] VARCHAR(50)); 
INSERT INTO #tb([t1],[t2]) VALUES (1, 'a'); --row 1 
INSERT INTO #tb([t1],[t2]) VALUES (2, 'b'); --row 2 

--see if it worked 
SELECT [t1], [t2] 
FROM #tb 

--clean up the temp table when you're done 
DROP TABLE #tb 
-1

SELECT t.field1,t.field2 INTO #myTempTable

FROM myDB.myOwner.myTable牛逼

WHERE ...

ORDER BY t.field1,t.field2;

- 如果希望表格是GLOBAL,請使用## myTempTable作爲名稱。