无法检索列信息:sql命令未返回任何列信息

时间:2011-04-22 17:20:11

标签: ssis

我使用的是Microsoft sql server 2008,我尝试了所有3种解决方案,但每次都出现同样的错误

Error at Data Flow Task[OLEDB source[449]]:No colum information was returned by the sql command

我正在使用以下一批sql语句来检索我公司中所有服务器的服务器级配置。表变量@tb1_SvrStng有83列,使用不同的资源填充。

所以我总结了sql脚本。我不能将它用作存储过程,因为这个脚本将针对14个服务器运行(每个服务器一次)。因此,如果我将过程存储在一台服务器上,则其他服务器无法在其上下文中执行该过程。

我将非常感谢您的帮助。我没有在我的脚本中使用任何临时表。

declare @tb1_SvrStng table 
( 
srvProp_MachineName varchar(50), 
srvProp_BldClrVer varchar(50), 
srvProp_Collation varchar(50), 
srvProp_CNPNB varchar(100), 
... 
xpmsver_ProdVer varchar(50),
..... . 
syscnfg_UsrCon_cnfgVal int,
..... 
); 
insert into @tb1_SvrStng 
( 
srvProp_BldClrVer, 
srvProp_Collation, 
srvProp_CNPNB , ........ 
........ . 
) 
select convert(varchar, serverproperty('BuildClrVer')), 
convert(varchar, serverproperty('Collation')) 
........
....... 
declare @temp_msver1 table 
( 
id int, name varchar(100), 
........... 
); 

insert into @temp_msver1 exec xp_msver 
Update @tb1_SvrStng 
set xpmsver_ProdVer = 
( 
select value from @temp_msver1 where name = 'ProductVersion' 
), 
xpmsver_Platform = 
( 
select value from @temp_msver1 where name = 'Platform' 
), 
.....
...... 
select 
srvProp_SerName as srvProp_SerName, 
getdate() as reportDateTime, 
srvProp_BldClrVer as srvProp_BldClrVer, 
srvProp_Collation as srvProp_Collation, 
..... 
..... 
from @tb1_SvrStng 

1 个答案:

答案 0 :(得分:0)

从我可以从你的代码和问题中收集到的是,查询无法在运行时之外处理,因为你正在做一些动态的事情,或者它不会处理它,因为它正在做一些时髦的事情。

这样做的一个技巧是将数据流任务中的Source组件用于“虚拟” - 你可以用这样的查询伪造

SELECT 
CONVERT(DATATYPE,NULL) AS srvProp_SerName, 
CONVERT(DATETIME,NULL) AS reportDateTime, 
CONVERT(DATATYPE,NULL) AS srvProp_BldClrVer, 
CONVERT(DATATYPE,NULL) AS srvProp_Collation 

这样源组件应该能够读取元数据。然后,您可以将正确的查询(只要它在查询文本的长度范围内)放入变量中,然后将其作为表达式分配给源组件。

在运行时,它将使用表达式查询 - 并且希望不要过多关注元数据问题。

这可能会或可能不会奏效,但值得一试,因为不需要很长时间才能确认。