这是我发现有用的查询(当然修改后):
DECLARE @numberofitemsperpage INT DECLARE @numberofpages INT DECLARE @currentpage int
DECLARE @countRecords float SET @countRecords = (Select COUNT(*) From sz_hold_visitsData) -- Excel 一次可以保存大约一百万条记录。如果@countRecords> = 1000000 SET @numberofitemsperpage = 500000 ELSE IF @countRecords <1000000及@countRecords> = 500000 SET @numberofitemsperpage = 250000 ELSE IF @countRecords <500000 AND @countRecords> = 100000 SET @numberofitemsperpage = 50000 ELSE SET @numberofitemsperpage = 10000
DECLARE @numberofpages_deci float SET @numberofpages_deci = @countRecords / @numberofitemsperpage
SET @numberofpages = CEILING(@numberofpages_deci) Select @countRecords AS countRecords, @numberofitemsperpage AS numberofitemsperpage , @numberofpages_deci AS numberofpages_deci, @numberofpages AS numberofpagesFnl
SET @currentpage =0 WHILE @currentpage < @numberofpages BEGIN SELECT a.* FROM (SELECT row_number() OVER (ORDER BY person_ID) AS ROW, * FROM sz_hold_visitsData) WHERE ROW >= @currentpage * @numberofitemsperpage +1 AND Row < = (@currentpage+1) * @numberofitemsperpage
IF @@ROWCOUNT = 0 BREAK SET @currentpage = @currentpage +1 END
在这个摘录中,“sz_hold_visitsData”是我数据库中的一个表,而“person_ID”是其中的一个列。您还可以进一步修改脚本以输出到文件:
DECLARE @numberofitemsperpage INT DECLARE @numberofpages INT DECLARE @currentpage int
DECLARE @countRecords float SET @countRecords = (Select COUNT(*) From sz_hold_visitsData) -- Excel 一次可以保存大约一百万条记录。如果@countRecords> = 1000000 SET @numberofitemsperpage = 500000 ELSE IF @countRecords <1000000及@countRecords> = 500000 SET @numberofitemsperpage = 250000 ELSE IF @countRecords <500000 AND @countRecords> = 100000 SET @numberofitemsperpage = 50000 ELSE SET @numberofitemsperpage = 10000
DECLARE @numberofpages_deci float SET @numberofpages_deci = @countRecords / @numberofitemsperpage
SET @numberofpages = CEILING(@numberofpages_deci) Select @countRecords AS countRecords, @numberofitemsperpage AS numberofitemsperpage , @numberofpages_deci AS numberofpages_deci, @numberofpages AS numberofpagesFnl
DECLARE @sevrName nvarchar(50) SET @sevrName = '.\sql14' DECLARE @outputFile nvarchar(500)
SET @currentpage =0 WHILE @currentpage < @numberofpages BEGIN --SELECT a.* FROM (SELECT row_number() OVER (ORDER BY person_ID) AS ROW, * FROM sz_hold_visitsData) A WHERE ROW >= @currentpage * @numberofitemsperpage +1 AND行 <= (@currentpage+1) * @numberofitemsperpage SET @outputFile = 'C:\PSM\outVisits_' +convert(nvarchar(50), @currentpage) + '.csv' --Select @outputFile --TEST
DECLARE @cmd_ varchar(500) = 'sqlcmd -S' + @sevrName + ' -E -Q "SELECT a.* FROM (SELECT row_number() OVER (ORDER BY person_ID) AS ROW, * FROM sz_hold_visitsData) A WHERE ROW > = '+ CONVERT(nvarchar(500),@currentpage * @numberofitemsperpage +1) +' AND Row <= ' + CONVERT(nvarchar(500),((@currentpage+1) * @numberofitemsperpage)) +'" -s "," -o ' +@outputFile +' ' -- "C:\PSM\outVisits.csv" ' EXEC xp_cmdshell @cmd_
IF @@ROWCOUNT = 0 BREAK SET @currentpage = @currentpage +1 END
希望有所帮助。