我遇到了一些问题,在SQL Server 2008 R2中获得的查询效果很好,升级到2014年之后就不再适用了。任何帮助,将不胜感激。我得到的错误是:
Msg 213,Level 16,State 7,Line 1
列名或提供的值数与表定义不匹配。
DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。
以下是查询:
use AccessControl
set nocount on
declare @MaintResults table
(
Result int identity(1,1),
Cardholder_Count varchar(15),
Events_Count varchar(15),
User_Count varchar(15),
等...
)
查询一起大约是10页。其目的是将大量信息从数据库中提取到临时表中以及可以查看的位置。老实说,我不确定为什么我会遇到这个问题,因为数据库的名称实际上是#34; AccessControl" ..那么为什么我会收到错误?
答案 0 :(得分:0)
为了让我们为您解决这个问题,我们需要看到整个声明。
正如错误所述,当您插入表变量时,要么选择不同数量的列
否则,select语句中的某个类型不再与表变量兼容。这可能很简单,因为您的select和insert语句中有一个或两个字段是错误的。
如果没有来自OP的更多信息,我不会过分分析导致这种情况的原因,但是如果您升级了数据库并且您的应用程序正在维护Schema,那么可能会引入一些小的架构更改,是否不再支持在先前版本中工作的某种隐式类型转换?
运行Select以自行填充表变量,手动检查类型是否正常以及它们是否与表变量匹配。
您可以通过将select保存为视图,然后将视图的列定义与表变量进行比较来作弊