我正在尝试在具有相同表的两个服务器之间进行查询(对两个服务器使用相同的create语句)。当我尝试将服务器A的结果插入服务器B时,我收到一个错误,指示“列名或提供的值的数量与表定义不匹配。”
在服务器A上运行查询
Insert into ServerB.Database1.dbo.Table1
Select *
from Table1
错误很明显,但不清楚的是它产生的原因。这两个表的定义是相同的。我最终能够分离的是一个以数字值开头的表名不被识别。
当我在ServerA上运行时:
Select *
from ServerB.Database1.dbo.Table1
具有数值的字段未显示在查询的结果集中。短期修复是重命名数据库中的字段,但为什么会发生这种情况?
答案 0 :(得分:0)
我对整理很感兴趣,但实际上答案是将对象名称包装在方括号中。即SELECT [1col],[2col],[etc] FROM [1database]。[2owner]。[3table]。这样SQL就可以将每个识别为对象名而不是函数。
要记住的另一件事是不要在select语句中使用splat(*),这有潜在的问题。例如,如果ServerA的table1结构发生变化且ServerB的表格保持不变,则可能会在Insert中遇到错误。