我使用的是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
答案 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
这样源组件应该能够读取元数据。然后,您可以将正确的查询(只要它在查询文本的长度范围内)放入变量中,然后将其作为表达式分配给源组件。
在运行时,它将使用表达式查询 - 并且希望不要过多关注元数据问题。
这可能会或可能不会奏效,但值得一试,因为不需要很长时间才能确认。