2014-11-06 15 views
6

Perché la seguente istruzione INSERT non restituisce alcun errore?SQL Server: inserire la sintassi dell'istruzione INTO

CREATE TABLE Table1(id INT,name VARCHAR(10)) 

INSERT INTO Table1(xx.id,yyyy.name) Values (1,'A') 

Perché la dichiarazione di cui sopra ignorare xx. e yyyy.? Cosa implica questo?

+1

quali sono le xx. e yyy. dovrebbe rappresentare? INSERIRE (id, name) VALUES (1, 'A') – mxix

+1

Come sottolinea l'OP, questo non genera un errore: http://www.sqlfiddle.com/#!6/057c5. –

risposta

-1

Per quanto ne so, la sintassi che si sta utilizzando generalmente indica table.column Quindi, in altre parole, si sta tentando di inserire in Table1 ma dichiarando colonne da altre tabelle.

Si dovrebbe fare qualcosa di simile

CREATE TABLE Table1(id INT,name VARCHAR(10)) 

INSERT INTO Table1(id,name) Values (1,'A') 
+4

Penso che la domanda non sia come dovrebbe * essere * ma perché l'affermazione della domanda funziona nonostante la sintassi errata. –

0

Ciò implica lo spazio dei nomi di qualcosa ...

Ad esempio:

SELECT object.id, object.name FROM table object WHERE object.name = 'Foo'; 

             /\ 
              | | 
          object is the name space for the table. 

E se non si dispone di un namespace creato il la query non riesce.

0

L'unica cosa che posso pensare è che il motore di database sta ignorando lo spazio dei nomi poiché l'ambito della query è limitato all'ambito della tabella quando si ha a che fare con INSERT INTO. Quando si dice UPDATE dove più tabelle possono essere parte dell'ambito, il sotto non riuscirebbe. Non so perché questo accade ma se dovessi indovinare, probabilmente tutti i valori a sinistra dell'ultimo periodo "." viene ignorato

Se si analizza il piano di esecuzione per la query di seguito

CREATE TABLE Table1(id INT,name VARCHAR(10)) 

INSERT INTO Table1(Table2.dbo.id,...................name) Values (1,'A') 

AS

INSERT INTO [Table1]([id],[name]) Values(@1,@2) 
1

ho controllato anche la domanda qui sotto.

INSERT INTO Table11(xx.xx.xx.xx.xx.xx.xx.id,yy.yy.yy.yy.yy.yy.yy.yy.name) 
Values (1,'A') 

Ha funzionato anche. Di solito utilizziamo l'alias per i join. Come so, per la query Inserisci l'utilizzo di alias vicino al nome della tabella è limitato in sql. Nel caso del nome della colonna, la query utilizza solo la stringa accanto all'ultimo punto (.).

La conclusione è che la query di inserimento non interessa la stringa preceduta dal nome della colonna separata da punto (.).

Problemi correlati