数据格式类似这样的
姓名 时间 分数
张三 一年级 70
张三 二年级 70
张三 五年级 56
张三 四年级 90
张三 三年级 89
张三 六年级 89
李四 三年级 32
李四 四年级 55
李四 五年级 64
李四 六年级 63
王五 三年级 77
王五 二年级 89
王五 六年级 88
赵六 五年级 64
目标是想变成:
张三.xls 李四.xls;王五.xls;赵六.xls。表格式与张三哪个一样;即按时间排序
姓名 时间 分数
张三 一年级 70
张三 二年级 70
张三 三年级 56
张三 四年级 90
张三 五年级 89
张三 六年级 89
我写了一段代码,但是得不到想要的结果
USE BACKDATABASE
SELECT * INTO #SortINFO FROM BACKDATABASE
ORDER BY 姓名,分数
SELECT DISTINCT 姓名 INTO #SortINFO FROM BACKDATABASE
SELECT ROW_NUMBER() OVER(ORDER BY 姓名) AS rowid, 姓名 INTO #SingalID1 FROM #SingalID
--SELECT * FROM #SingalID1
DECLARE @maxROW INT,@i INT
SET @i=1
SELECT @maxROW = COUNT(*) FROM #SingalID1
DECLARE @adff NVARCHAR(30)
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'Ad Hoc Distributed Queries',1
RECONFIGURE
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
WHILE @i<@maxROW
BEGIN
SELECT @adff=姓名 from #SingalBusID1 where rowid=@i
EXEC master..xp_cmdshell 'bcp "SELECT * FROM #SortINFO a WHERE a.姓名= '+cast(@adff,VARCHAR(30)+'" queryout "C:\Users\hp\Desktop\'+cast(@adff as VARCHAR(30))+'.xls" -c -S"NEVC-I70261-T" -U"sa" -P"sa123"'
SET @i=@i+1
END
DROP TABLE #SortBUSINFO
DROP TABLE #SingalBusID
DROP TABLE #SingalBusID1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 0
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0
EXEC sp_configure 'Ad Hoc Distributed Queries',0
RECONFIGURE
EXEC sp_configure 'show advanced options',0
RECONFIGURE
数据只是个例子,想通过语言来实现。真实数据量很大,不方便通过向导一步一步导出,谢谢
------解决思路----------------------
把临时表#SortINFO换成实体表试试
------解决思路----------------------
你把 EXEC master..xp_cmdshell 改为 print 输出看看,语法是否错误
------解决思路----------------------
为什么要这样写,不能直接用游标吗
USE test
GO
DECLARE @name varchar(50)
DECLARE @sql varchar(8000)
DECLARE cur CURSOR FOR SELECT DISTINCT [姓名] FROM A ORDER BY [姓名]
OPEN cur
FETCH NEXT FROM cur INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='bcp "select t.[姓名],t.[时间],t.[分数] from (select *,case left([时间],1) when ''一'' then 1 when ''二'' then 2 when ''三'' then 3 when ''四'' then 4 when ''五'' then 5 when ''六'' then 6 end as stime from test.dbo.A where [姓名]='''+@name+''') t order by t.stime" queryout "c:\'+@name+'.xls" -c -U"sa" -P"123456"'
EXEC master..xp_cmdshell @sql
FETCH NEXT FROM cur INTO @name
END
CLOSE cur
DEALLOCATE cur
GO