SQL Server:插入INTO语句语法

时间:2014-11-06 11:49:27

标签: sql sql-server tsql

为什么以下INSERT语句没有出错?

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

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

为什么上述语句会忽略xx.yyyy.?这意味着什么?

4 个答案:

答案 0 :(得分:1)

我也检查了以下查询。

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

它也奏效了。通常我们使用别名进行连接。据我所知,For Insert查询在sql中限制使用表名附近的别名。对于列名称,查询仅使用最后一个Dot(。)旁边的字符串。

我的结论是,Insert查询不关心以Dot(。)分隔的列名前缀的字符串。

答案 1 :(得分:0)

这意味着某事物的命名空间......

例如:

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

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

如果您没有创建命名空间,则查询失败。

答案 2 :(得分: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)

答案 3 :(得分:-1)

据我所知,您使用的语法通常表示table.column 所以换句话说,你试图插入到Table1中,但是从其他表中声明了列。

你应该做这样的事情

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

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