我正在嘗試編寫一個存儲過程來執行文件夾中的所有.sql
文件,然後將結果輸出到CSV文件。如何創建一個動態查詢的臨時表,以便我可以BCP輸出
我的代碼:
DECLARE @Table table(
[FileName] varchar(100),
depth int,
isFile int
)
DECLARE @Result int
DECLARE @FileName VARCHAR(100)
DECLARE @exportFile VARCHAR(100)
DECLARE @ExportPath VARCHAR(100)
DECLARE @SQLText VARCHAR(MAX)
DECLARE @FilePath VARCHAR(100)
DECLARE @FULLPATH VARCHAR(200)
DECLARE @BULKEXEC NVARCHAR(MAX)
DECLARE @Cmd nvarchar(1000)
SET @FilePath = 'c:\temp'
SET @ExportPath = 'c:\temp\output'
INSERT INTO @Table
EXEC master..xp_dirtree @FilePath,1,1
DELETE FROM @Table WHERE isFile=0
DECLARE FileList CURSOR STATIC FOR SELECT [FileName] FROM @Table WHERE FileName LIKE '%.sql'
OPEN FileList
FETCH FIRST FROM FileList INTO @FileName
WHILE @@Fetch_Status = 0
BEGIN
SET @exportFile = REPLACE(@FileName,'.sql','.csv')
SET @FULLPATH = @FilePath + '\' + @FileName
SET @BULKEXEC = 'SELECT @SQLText = BulkColumn FROM OPENROWSET(BULK ''' + @FULLPATH + ''', SINGLE_BLOB) as x'
EXEC sp_ExecuteSQL @BULKEXEC, N'@SQLText VARCHAR(MAX) output ', @SQLText output
EXEC (@SQLText)
SET @Cmd = 'bcp "SELECT * FROM ##Temptable" queryout "' + @ExportPath + '\' + @exportFile + '" -c -t, -T'
EXEC @Result = master..xp_cmdshell @cmd
FETCH NEXT FROM FileList INTO @FileName
END
CLOSE FileList
DEALLOCATE FileList
這目前執行的文件,但我缺少上傳結果到##Temptable
中間位。
有人能幫忙嗎?
你能澄清你的_「我錯過了中間位」 _是什麼意思? –
@TT。到目前爲止,我有運行查詢的代碼,以及一些將數據導出到csv的代碼。我無法編制代碼來填充## Temptable,以及執行SQLText的不同結果,以使我能夠導出查詢結果。或者,如果有更合適的方法將結果導出到csv文件,這可能是什麼。 – Leigh