当我执行以下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。
答案 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作为名称。