为什么以下INSERT
语句没有出错?
CREATE TABLE Table1(id INT,name VARCHAR(10))
INSERT INTO Table1(xx.id,yyyy.name) Values (1,'A')
为什么上述语句会忽略xx.
和yyyy.
?这意味着什么?
答案 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')