2011-05-23 3 views
2

Bonjour lorsque j'exécute le TSQL suivant, j'obtiens le message d'erreur ci-dessous. Mais il n'y a rien de mal avec la syntaxe SQL est là?SQL Server, Problème lors de la création de la table temporaire dans TSQL

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

Msg 102, niveau 15, état 1, ligne 3 syntaxe incorrecte près ''.

Il n'y a rien d'autre dans la fenêtre de requête SQL. Exécution de SQL Server 2005.

Répondre

6

Comme jmoreno mentionne, la syntaxe est VALUES(),() SQL Server 2008+ pris en charge mais vous avez marqué ce que SQL Server 2005.

utilisation:

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

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

Il est également possible de le faire en une seule requête, en utilisant le SELECT ... INTO clause, mais le table temporaire ne peut exister déjà:

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 Poneys J'ai juste eu besoin d'upvote votre année et demi vieille réponse à cause de "x". Je pensais que cela devait être une faute de frappe à la fin de la déclaration de FROM, mais ce n'était pas et cela m'aide beaucoup! – AZee

2

Essayez ceci:

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

Vous devez spécifier les colonnes que vous insérez dans.

// EDIT

Désolé, la syntaxe SQL 2005 ci-dessous. Ce n'est pas aussi élégant.

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

Je reçois exactement la même erreur que ci-dessus. – Grant

1

Vous dites que vous utilisez SQL 2005, mais les valeurs(),() syntaxe n'a pas été mis en œuvre jusqu'en 2008.

+0

oh ok .. alors comment puis-je ré-écrire? – Grant

+1

Instructions d'insertion multiples ou sélection et UNION ALL. – jmoreno

0

On dirait que vous essayez d'insérer deux lignes, de sorte que vous devez insérer la première ligne, puis la seconde au lieu d'essayer de serrer tout en un seul:

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 EN #myTempTable

DE myDB.myOwner.myTable t

OÙ ...

ORDER BY t.field1, t.field2;

- utilisez ## myTempTable comme nom si vous souhaitez que votre table soit GLOBAL.

Questions connexes