为什么以下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