我正在使用SQL Server 2005 SP4。我有一个存储过程,它从许多表中获取数据并将其转换为XML,然后将此XML数据发送到存储过程的输出变量。
现在我想将这个XML数据加载到具有特定位置的文件系统中的文件;为此我使用BCP
实用程序和以下命令:
BCP "exec master.[dbo].[SPFileCreationInstanceOnlyXML]" QUERYOUT "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\PerformanceAnalyticsXML\LEOSQL2K5Apr112014128PM.xml" -c -t -T -SLEO\SQL2K5
现在,当我尝试从命令提示符执行时,此命令会给我一条错误消息。
SQLState = S0002,NativeError = 208
错误= [Microsoft] [SQL Native Client] [SQL Server]无效的对象名称' ## traceinfo'。
我无法弄清楚为什么它是对临时表的引用。我从BCP
执行的存储过程代码如下所示
ALTER procedure [dbo].[SPFileCreationInstanceOnlyXML]
as
begin
DECLARE @Result XML
exec [dbo].[BCPTableLineXML] @Result OUT
SELECT @Result AS FinalOutput
end
关于这一点最有趣的事情我在SQL Server 2008 R2上有相同的存储过程,就像其他服务器中的一个魅力一样只有这一个与SQL Server 2005一起给我这个错误信息。
BCPTabelineXML的代码如下 BCPTableXML中的代码如下。
ALTER procedure [dbo].[BCPPerformanceBaseLineXML]
@ALLRet xml OUTPUT
as
begin
DECLARE @ALL xml
--SQL Server Version and Server Name
DECLARE @SQLTraceFlag NVARCHAR(MAX)
create table ##traceinfo(flag varchar(20),Status varchar(10),Global varchar(10),Session varchar(10))
INSERT INTO ##traceinfo EXECUTE ('DBCC TRACESTATUS(-1)')
--select * from ##traceinfo
SET @SQLTraceFlag =
(
select * from
(
select * from ##traceinfo
) as SQLTraceFlag
for xml auto
);
--select @SQLTraceFlag
drop table ##traceinfo
set @ALL = CONVERT(XML
ISNULL(@SQLTraceFlag,''))
set @ALLRet=@ALL;
end
提前感谢您的帮助和宝贵的时间。
干杯, NIC
答案 0 :(得分:1)
使用表变量而不是临时表来解决问题。 -