2014-10-28 74 views
0

我有一个存储过程,我计划使用SSRS,它包含50多个不同的列。我有另一个执行它的过程,我计划插入到结果表中,但我需要事先知道列名。当我尝试执行时,出现如下错误:保存存储过程的列类型

列名或提供的值数量与表定义不匹配。

我怀疑这是因为我的一列是不正确的数据类型。我怎样才能弄清楚创建我的表的数据类型是哪些列?

我的插入语句:

insert into @resultset 
    exec my_proc 
+3

我认为你错过了一列或有一个额外的列 - 你会得到一个不同的错误消息的数据类型的问题。你使用的是什么版本的SQL Server?你为什么给这个'mysql'添加标签? – 2014-10-28 18:52:26

+0

@AaronBertrand目前在SQL服务器管理工​​作室2008年,我将删除标签,意思是说微软的SQL。由于错误不是非常详细,我怎样才能拉那些程序列? – aperture 2014-10-28 19:03:48

+0

好吧,最简单的方法是查看存储过程,并计算最后一个'SELECT'中的列,并检查至少计数是否与'@ resultset'的定义匹配,然后从那里开始。这些输出并不是真正存储在SQL Server元数据中的任何地方[尽管SQL Server 2012中有帮助函数可以帮助您升级时](http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/ 20/SQL服务器-v-下一德纳-元数据discovery.aspx)。 – 2014-10-28 19:08:25

回答

1

作为一个快速作弊,你可以运行存储过程作为一个SQL语句的胆量,并改变过去的SELECT语句转换成类似:

SELECT TOP 0 columnlist 
INTO ResultTable 
FROM LastSelectStatement 

这会给你正确的列号和数据类型。

+0

我没有想到只是抓住了大量的代码,并使其成为一个选择。代码很长并且令人困惑,这似乎是最好的答案。即使它是一个骗子。 :) – aperture 2014-10-30 12:51:34