SQL Server, Проблема создания временной таблицы в TSQL - PullRequest
2 голосов
/ 24 мая 2011

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

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

Msg 102, уровень 15, состояние 1, строка 3 Неверный синтаксис рядом с ','.

В окне SQL-запроса больше ничего нет.Запуск SQL Server 2005.

Ответы [ 5 ]

6 голосов
/ 24 мая 2011

Как упоминает 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 , но временная таблица уже не может существовать:

SELECT *
  INTO #tb
  FROM (SELECT CAST(1 AS TINYINT) AS t1, 
               CAST('a' AS VARCHAR(50)) AS t2
        UNION ALL
        SELECT 2, 'b') x
2 голосов
/ 24 мая 2011

Попробуйте это:

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'
1 голос
/ 24 мая 2011

Вы говорите, что используете SQL 2005, но синтаксис VALUES (), () не был реализован до 2008 года.

0 голосов
/ 24 мая 2013

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

ОТ myDB.myOwner.myTable t

ГДЕ ...

ЗАКАЗАТЬ ПО t.field1, т.field2;

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

0 голосов
/ 24 мая 2011

Похоже, вы пытаетесь вставить две строки, поэтому вам нужно вставить первую строку, а затем вторую, а не пытаться сжать все это в одну:

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
...