2011-05-23 4 views
2

Привет, когда я выполняю следующий TSQL, я получаю сообщение об ошибке ниже. Но нет ничего плохого в синтаксисе SQL?SQL Server, проблема создания временной таблицы в TSQL

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.

ответ

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 Ponies Мне просто нужно было укрепить свой год и наполовину старый ответ из-за «х». Я думал, что это должно быть опечатка в конце инструкции FROM, но это было не так, и это очень помогает мне! – AZee

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' 
+0

Я получаю ту же ошибку, что и выше. – Grant

1

Вы говорите, что вы используете SQL 2005, но ЗНАЧЕНИЯ(), синтаксис() не был реализован до 2008 года

+0

oh ok .. то как мне его переписать? – Grant

+1

Несколько операторов вставки или выбор и UNION ALL. – jmoreno

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

ВЫБРАТЬ t.field1, t.field2 INTO #myTempTable

ОТ myDB.myOwner.myTable т

ГДЕ ...

ORDER BY t.field1, t.field2;

- используйте ## myTempTable как имя, если вы хотите, чтобы ваша таблица была GLOBAL.

Смежные вопросы