SQL Server,问题在SQL中创建临时表

时间:2011-05-23 23:46:54

标签: sql sql-server sql-server-2005 tsql temp-tables

当我执行以下TSQL时,我收到以下错误消息。但是SQL语法有什么不对吗?

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

Msg 102,Level 15,State 1,Line 3   ','。

附近的语法不正确

SQL查询窗口中没有其他内容。运行SQL Server 2005。

5 个答案:

答案 0 :(得分: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 :(得分:2)

试试这个:

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

您需要指定要插入的列。

// EDIT

抱歉,下面是SQL 2005语法。它不是那么优雅。

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

答案 2 :(得分:1)

你说你正在使用SQL 2005,但VALUES(),()语法直到2008年才实现。

答案 3 :(得分: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

答案 4 :(得分:-1)

SELECT t.field1,t.field2 INTO #myTempTable

FROM myDB.myOwner.myTable t

在哪里......

ORDER BY t.field1,t.field2;

- 如果您希望表格为GLOBAL,请使用## myTempTable作为名称。