在一个存储过程CustomFeed_ExportDataToXLS中,用到多个 Exec(SQLScript) ;
其中使用了多个系统临时表来存临时数据,比如以下语句:if exists (select * from tempdb..sysobjects where name = '##TempExportData')
drop table ##TempExportDataif exists (select * from tempdb..sysobjects where name = '##TempExportData2')
drop table ##TempExportData2--add identity(int,1,1) for order to export
SELECT @sql = 'select identity(int,1,1) as TableId, ' + @columnNames + ' into ##TempExportData2'
exec (@sql) SELECT @sql = 'Insert into ##TempExportData2 Select ' + @columnConvert + ' from ##TempExportData'
exec (@sql) SELECT @sql = 'select '+ @columnConvert + ' into ##TempExportData3 from ##TempExportData2 order by TableId'
exec (@sql) --select * from ##TempExportData3 order by TableIdif @fileformate = 1 --CSV format file,use -t","
begin
select @sql = 'bcp "select * from ' + @dbName + '##TempExportData3" queryout "' + @path + '' + @filename + '.csv" -c -t"," -S' + @@SERVERNAME + ' -E '+@UsrPwd
end
if @fileformate = 2 --xls format ,use -c -q
begin
select @sql = 'bcp "select * from ' + @dbName + '##TempExportData3" queryout "' + @path + '' + @filename + '.xls" -c -q -S' + @@SERVERNAME + ' -E '+@UsrPwd
enddrop table ##TempExportData
drop table ##TempExportData2 说明:##TempExportData系统临时表存没有表头的数据;
##TempExportData2存带表头(@columnNames)的数据,并加了一个identity(int,1,1) as TableId字段;
在测试过程中往往表头不在##TempExportData2表的第一列,所有按TableId顺序再存到##TempExportData3,然后输出;现在的问题是:
如果多用户环境下,这些系统表##TempExportData....里面的数据可能有混乱错误,
因为很多用户下,都调用同一个存储过程CustomFeed_ExportDataToXLS去输出不同的表的数据出来.不同的表,表字段名(@columnNames)和表列(@columnConvert)不同,所有系统临时表有错误的可能.
怎么能解决这个问题呢? 用户临时表能解决这个问题吗?
避免使用系统临时表.
其中使用了多个系统临时表来存临时数据,比如以下语句:if exists (select * from tempdb..sysobjects where name = '##TempExportData')
drop table ##TempExportDataif exists (select * from tempdb..sysobjects where name = '##TempExportData2')
drop table ##TempExportData2--add identity(int,1,1) for order to export
SELECT @sql = 'select identity(int,1,1) as TableId, ' + @columnNames + ' into ##TempExportData2'
exec (@sql) SELECT @sql = 'Insert into ##TempExportData2 Select ' + @columnConvert + ' from ##TempExportData'
exec (@sql) SELECT @sql = 'select '+ @columnConvert + ' into ##TempExportData3 from ##TempExportData2 order by TableId'
exec (@sql) --select * from ##TempExportData3 order by TableIdif @fileformate = 1 --CSV format file,use -t","
begin
select @sql = 'bcp "select * from ' + @dbName + '##TempExportData3" queryout "' + @path + '' + @filename + '.csv" -c -t"," -S' + @@SERVERNAME + ' -E '+@UsrPwd
end
if @fileformate = 2 --xls format ,use -c -q
begin
select @sql = 'bcp "select * from ' + @dbName + '##TempExportData3" queryout "' + @path + '' + @filename + '.xls" -c -q -S' + @@SERVERNAME + ' -E '+@UsrPwd
enddrop table ##TempExportData
drop table ##TempExportData2 说明:##TempExportData系统临时表存没有表头的数据;
##TempExportData2存带表头(@columnNames)的数据,并加了一个identity(int,1,1) as TableId字段;
在测试过程中往往表头不在##TempExportData2表的第一列,所有按TableId顺序再存到##TempExportData3,然后输出;现在的问题是:
如果多用户环境下,这些系统表##TempExportData....里面的数据可能有混乱错误,
因为很多用户下,都调用同一个存储过程CustomFeed_ExportDataToXLS去输出不同的表的数据出来.不同的表,表字段名(@columnNames)和表列(@columnConvert)不同,所有系统临时表有错误的可能.
怎么能解决这个问题呢? 用户临时表能解决这个问题吗?
避免使用系统临时表.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货