爲什麼以下INSERT
語句不會提供任何錯誤?SQL Server:插入INTO語句語法
CREATE TABLE Table1(id INT,name VARCHAR(10))
INSERT INTO Table1(xx.id,yyyy.name) Values (1,'A')
爲什麼上述聲明忽略xx.
和yyyy.
?這意味着什麼?
爲什麼以下INSERT
語句不會提供任何錯誤?SQL Server:插入INTO語句語法
CREATE TABLE Table1(id INT,name VARCHAR(10))
INSERT INTO Table1(xx.id,yyyy.name) Values (1,'A')
爲什麼上述聲明忽略xx.
和yyyy.
?這意味着什麼?
據我所知,你使用的語法通常意味着table.column 所以換句話說,你試圖插入到Table1中,但聲明來自其他表的列。
你應該做這樣的事情
CREATE TABLE Table1(id INT,name VARCHAR(10))
INSERT INTO Table1(id,name) Values (1,'A')
我認爲問題不在於它應該如何,而是爲什麼儘管語法不正確,問題的陳述仍然有效。 – 2014-11-06 11:55:33
這意味着東西...
例如命名空間:
SELECT object.id, object.name FROM table object WHERE object.name = 'Foo';
/\
| |
object is the name space for the table.
如果你還沒有命名空間創建查詢失敗。
我能想到的唯一情況是數據庫引擎忽略名稱空間,因爲在處理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)
我檢查了下面的查詢也。
INSERT INTO Table11(xx.xx.xx.xx.xx.xx.xx.id,yy.yy.yy.yy.yy.yy.yy.yy.name)
Values (1,'A')
它也得到了工作。通常我們使用別名來進行連接。據我所知,對於插入查詢在表名附近使用別名在sql中受到限制。在列名稱的情況下,查詢只使用最後一個點(。)旁邊的字符串。
我得出結論:插入查詢不關心以點號(。)分隔的列名前綴的字符串。
什麼是XX。和yyy。應該代表? INSERT INTO(id,name)VALUES(1,'A') – mxix 2014-11-06 11:53:39
正如OP指出的那樣,這不會產生錯誤:http://www.sqlfiddle.com/#!6/057c5。 – 2014-11-06 12:12:45