2014-11-06 131 views
6

爲什麼以下INSERT語句不會提供任何錯誤?SQL Server:插入INTO語句語法

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

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

爲什麼上述聲明忽略xx.yyyy.?這意味着什麼?

+1

什麼是XX。和yyy。應該代表? INSERT INTO(id,name)VALUES(1,'A') – mxix 2014-11-06 11:53:39

+1

正如OP指出的那樣,這不會產生錯誤:http://www.sqlfiddle.com/#!6/057c5。 – 2014-11-06 12:12:45

回答

-1

據我所知,你使用的語法通常意味着table.column 所以換句話說,你試圖插入到Table1中,但聲明來自其他表的列。

你應該做這樣的事情

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

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

我認爲問題不在於它應該如何,而是爲什麼儘管語法不正確,問題的陳述仍然有效。 – 2014-11-06 11:55:33

0

這意味着東西...

例如命名空間:

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

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

如果你還沒有命名空間創建查詢失敗。

0

我能想到的唯一情況是數據庫引擎忽略名稱空間,因爲在處理INSERT INTO時,查詢的作用域限於表的作用域。說到UPDATE,其中多個表可以成爲範圍的一部分,下面的內容會失敗。不知道爲什麼會發生這種情況,但如果我猜測,可能是所有值在最後一個時間段的左邊。被忽略

如果你分析的執行計劃下面的查詢

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

我檢查了下面的查詢也。

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

它也得到了工作。通常我們使用別名來進行連接。據我所知,對於插入查詢在表名附近使用別名在sql中受到限制。在列名稱的情況下,查詢只使用最後一個點(。)旁邊的字符串。

我得出結論:插入查詢不關心以點號(。)分隔的列名前綴的字符串。