2010-06-02 70 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