2011-10-11 69 views
0

我想將SQL Server輸出發送到按預期工作的文件。但是如果我在變量中傳遞文件路徑,它不會創建文件。使用變量名將SQL Server輸出到文件

工作

:out 'C:\Temp.txt' 

不工作

DECLARE @BCVFileName VARCHAR(500) 
SET @BCVFileName= 'C:\Temp.txt' 

:out @BCVFileName 

任何人都可以請幫我在這?

感謝, 馬赫什

回答

0

爲此,您需要查詢存儲在查詢文件,然後你可以如下圖所示存儲結果,從命令執行到一個文本文件中。

>sqlcmd -E -S(Local)\SQLExpress -YourDBName -iC:\myQuery -oC:\Output.txt 

另一種使用T-SQL,並創建一個批處理語句通過XP_CMDSHELL執行。以下腳本將幫助您執行相同的操作,只需將您的查詢,ServerName替換爲使用的變量即可。

SET NOCOUNT ON; 
GO 
DECLARE @sqlcmd varchar(1000); 
PRINT 'using SqlCMD.exe'; 
SET @sqlcmd = 'sqlcmd -S' + @@SERVERNAME + ' -E -oc:\outfile.txt ' 
DECLARE @cmd varchar(1000); 
SET @cmd = '-Q"SELECT RIGHT(REPLICATE('' '' , 6) + CONVERT(varchar, AddressID), 6) AS AddressID, CONVERT(varchar(10), ModifiedDate, 121) AS ModifiedDate FROM AdventureWorks.Person.Address ORDER BY ModifiedDate;"'; 
SET @sqlcmd = @sqlcmd + @cmd; 
--SELECT @sqlcmd; 
EXEC xp_cmdshell @sqlcmd, no_output; 
PRINT 'using BCP.exe'; 
SET @cmd = '"SELECT RIGHT(REPLICATE('' '' , 6) + CONVERT(varchar, AddressID), 6) AS AddressID, CONVERT(varchar(10), ModifiedDate, 121) AS ModifiedDate FROM AdventureWorks.Person.Address ORDER BY ModifiedDate;"'; 
SET @sqlcmd = 'bcp ' + @cmd + ' queryout "c:\outfile2.txt" -c -T -S' + @@SERVERNAME 
--SELECT @sqlcmd; 
EXEC xp_cmdshell @sqlcmd, no_output; 

問候