2010-06-02 73 views

回答

2

您无法直接使用存储过程。我建议在SQL Server Management Studio中右键单击数据库,然后选择“导出数据”。

为它提供一个查询或返回行的存储过程。告诉它你希望文件由逗号和用引号限定的文本分隔。

当向导询问您是要执行还是保存时,请将其保存到磁盘。

这使得所谓的SSIS包。然后,您可以使用Windows资源管理器来运行它,或者使用名为dtexec.exe的命令行程序来运行它,或者将它提供给DBA,让它们在SQL Server中运行它。

1

这是可能做到,但你需要有足够的权利来运行xp_cmdshell和即席分布式查询。

sp_configure 'Show Advanced Options', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE 
GO 
DECLARE @OutputPath VARCHAR(1000) 
SET @OutputPath = 'd:\temp\' 
DECLARE @OutputFilename VARCHAR(1000) 
DECLARE @ServerName VARCHAR(1000) 
SET @ServerName='servername' 
DECLARE @Username VARCHAR(50) 
SET @Username = 'username' 
DECLARE @Password VARCHAR(50) 
SET @Password = 'password' 
DECLARE @DatabaseName VARCHAR(50) 
SET @DatabaseName = 'databasename' 
DECLARE @Dsn VARCHAR(1000) 
SET @Dsn = 'Server='[email protected]+';Database='[email protected]+';Uid='[email protected]+';Pwd='[email protected]+';' 

DECLARE @StartProcedureTime DATETIME 
DECLARE @EndProcedureTime DATETIME 
DECLARE @TimeTaken INTEGER 
DECLARE @QueryToRun VARCHAR(1000) 
DECLARE @Query VARCHAR(1000) 
DECLARE @result INT 

SET @Query = 'mkdir "' + @OutputPath + @DatabaseName +'\"' 
EXEC @result = [master]..xp_cmdshell @Query 

DECLARE db_cursor CURSOR FOR 
SELECT 
T.[FileName] + '.csv' AS [FileName], 
REPLACE(T.SqlToRun, '''', '''''') AS [SqlToRun] 
FROM 
(
SELECT 'sp_DataGenerator_AverageRatingAverage' AS [FileName], 'exec sp_DataGenerator_AverageRatingAverage 54' AS [SqlToRun] 
UNION ALL 
SELECT 'sp_DataGenerator_AverageRatingGood', 'exec sp_DataGenerator_AverageRatingGood ''01-01-2009'', ''01-01-2010''' 
UNION ALL 
SELECT 'sp_DataGenerator_AverageRatingBad', 'exec sp_DataGenerator_AverageRatingBad ''01-01-2009'', ''01-01-2010''' 
) AS T 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @OutputFilename, @QueryToRun 
WHILE @@FETCH_STATUS = 0 
BEGIN 
SET @Query = 'bcp "SELECT * FROM OPENROWSET (''SQLOLEDB'','''[email protected]+''','''[email protected]+''') AS T" queryout '[email protected] + @DatabaseName + '\' + @OutputFilename +' -c -t, -r\n -U'[email protected]+' -P'[email protected]+' -S'[email protected] + ' > ' [email protected] + @DatabaseName + '\' + @OutputFilename +'.txt' 

SET @StartProcedureTime = getdate() --take start time 
EXEC @result = [master]..xp_cmdshell @Query 
SET @EndProcedureTime = getdate() --take end time 
SET @TimeTaken = DATEDIFF(millisecond, @StartProcedureTime, @EndProcedureTime) --take difference in milliseconds. 

PRINT '"'[email protected] + '" took ' + str(@TimeTaken) + ' Milliseconds.' 

FETCH NEXT FROM db_cursor INTO @OutputFilename, @QueryToRun 
END 
CLOSE db_cursor 
DEALLOCATE db_cursor 

go 

sp_configure 'xp_cmdshell', 0 
GO 
RECONFIGURE 
GO 
sp_configure 'Ad Hoc Distributed Queries', 0 
GO 
RECONFIGURE 
GO 
sp_configure 'Show Advanced Options', 0 
GO 
RECONFIGURE 
GO