2014-12-04 58 views
1

相似的问题可能已经在这个论坛上询问有关将存储过程结果导出为ex​​cel文件的问题,我已经尝试了几次尝试,但文件没有导出到我期望的文件夹,理解将存储过程结果导出为ex​​cel

我创建

/****** Object: StoredProcedure [dbo].[Copy_DataDump_SpecificQuery] Script Date: 10/28/2014 15:59:03 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


ALTER PROC [dbo].[Copy_DataDump_SpecificQuery] 
@SQLScript VARCHAR(MAX) 
,@OutPut_Number INT OUTPUT 
,@Output_FIleName VARCHAR(MAX) OUTPUT 

AS 
SET NOCOUNT ON 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
BEGIN 

BEGIN TRY 
DECLARE @server Varchar (100) 
SET @server = 'MyServerName' 
DECLARE @FileName VARCHAR(255) 
DECLARE @Date VARCHAR(12) 
SELECT @Date = CONVERT(VARCHAR(10),GETDATE(),120) 
SET @Output_FIleName = CAST(NEWID() AS VARCHAR(MAX))+ '.xls' 


DECLARE @FilePath VARCHAR (4000) 
SET @FilePath = '\\ComputerName\Users\MyUserName\Downloads\Exel_File' + @Output_FIleName ; 

IF OBJECT_ID('tempDB..##temp_Query', 'U') IS NOT NULL 
    DROP TABLE ##temp_Query; 

---------------------------------------------------------------------------------------------- 
    DECLARE @Query AS VARCHAR(MAX) 
    DECLARE @FROM_Start INT 

    SELECT @FROM_Start = CHARINDEX(' FROM ',@SQLScript) 

    SELECT @Query = SUBSTRING(@SQLScript,0,@FROM_Start) + ' INTO ##temp_Query FROM ' + SUBSTRING(@SQLScript,@FROM_Start+6,LEN(@SQLScript)) 
PRINT (@Query) 
    Exec(@Query)  
    ------------------------------------------------------------------------------------------------------------------ 
    DECLARE @dbName VARCHAR (100) 
    SET @dbName = 'master' 
    DECLARE @sql VARCHAR (5000) 

    SET @sql = 'Select * from tempdb.dbo.##temp_Query' 

    DECLARE @dbName1 VARCHAR (100) 
    IF OBJECT_ID ('tempDB..##TempExport_Query1','U') is not null 
    DROP TABLE ##TempExport_Query1 
    IF OBJECT_ID ('tempDB..##TempExport_Query2','U') is not null 
    DROP TABLE ##TempExport_Query2 

    SELECT @dbName1 = @dbName 
    SELECT @dbName = 'use ' + @dbName + ';' 

    DECLARE @columnNames VARCHAR (8000), @columnConvert VARCHAR (8000), @tempSQL VARCHAR (8000) 
    SELECT 
     @tempSQL = LEFT(@sql, CHARINDEX('from', @sql) - 1) + ' into ##TempExport_Query1 ' + 

     SUBSTRING(@sql, CHARINDEX('from', @sql) - 1, LEN(@sql)) 
    EXEC (@dbName + @tempSQL) 

    --SELECT * 
    --FROM tempdb.INFORMATION_SCHEMA.Columns 
    --WHERE table_name = '##TempExport_Query1' 

    SELECT @columnNames = COALESCE(@columnNames + ',', '') + '"' + column_name + '"', 
     @columnConvert = COALESCE(@columnConvert + ',', '') + 'convert(nvarchar(4000),' 
     + '[' + column_name + ']' + CASE 
      WHEN data_type IN ('datetime', 'smalldatetime') THEN ',121' 
      WHEN data_type IN ('numeric', 'decimal') THEN ',128' 
      WHEN data_type IN ('float', 'real', 'money', 'smallmoney') THEN ',2' 
      WHEN data_type IN ('datetime', 'smalldatetime') THEN ',120' ELSE '' 
     END + ') as ' + '[' + column_name + ']' 
    FROM tempdb.INFORMATION_SCHEMA.Columns 
    WHERE table_name = '##TempExport_Query1' 

-- execute select query to insert data and column names into new temp table   
    SELECT @sql = 'select ' + @columnNames + 'temp##SortID into ##TempExport_Query2 from (select ' + @columnConvert + ', 
     ''2'' as temp##SortID   
      from ##TempExport_Query1 union all select ''' + REPLACE(@columnNames, ',', ''', ''') + ''', 
       ''1'') t '   
    EXEC (@sql) 

    SET @sql = 'bcp " select * from ##TempExport_Query2 ORDER BY temp##SortID " queryout "' + @FilePath + 
    '" -U uno -P uno -c -T -S ' + @server 

    EXEC master..xp_cmdshell @sql 
SET @OutPut_Number = 1 

END TRY 
BEGIN CATCH 
--DECLARE @ErrorDescription VARCHAR(1000) = 'ERROR - ' + ERROR_MESSAGE() 
--  RAISERROR(@ErrorDescription,16,1) 
    SET @OutPut_Number = 2 
    --SET @OutPut_Message = @@ERROR 
END CATCH 


End 

参数

存储过程210
DECLARE @OutPut_Number INT; 
DECLARE @OutPut_Message VARCHAR(1000); 
EXECUTE dbo.Copy_DataDump_SpecificQuery 'SELECT O.ID AS SystemNumber 
     ,'' AS ManualNumber 
     ,O.Date AS InvoiceDate 
     ,OT.ID AS CustomerCode 
     ,OT.Name AS CustomerName 
     ,I.ID AS ItemID 
     ,I.Description AS Item 
     ,OL.UnitQty 
     ,OL.FreeQty 
     ,OL.UnitPrice 
     ,OL.GrossValue 
     ,NetSaleValue 
     ,DueDate = '' 
     ,A.ID AS SalesRepCode 
     ,ItemCostPrice = OL.UnitPrice 
    FROM TxnOrder O 
     INNER JOIN TxnOrderLine OL ON O.UID = OL.TxnOrderUID AND O.SiteUID = Ol.TxnOrder_SiteUID 
     INNER JOIN Outlet OT ON O.OutletUID = OT.UID 
     INNER JOIN Item I ON OL.ItemUID = I.UID 
     INNER JOIN Agent A ON O.AgentUID = A.UID 
    WHERE O.mpt_TypeEnum = 1 
     AND(O.IsPrinted = 1 OR O.mpt_SalesmodelEnum = 2) 
     --AND O.Date >= @StartDate AND O.Date <= @EndDate 
     --AND (@DistributorUID IS NULL OR O.DistributorUID = @DistributorUID) 
     --AND (@AgentUID IS NULL OR O.AgentUID = @AgentUID)' 
,@OutPut_Number OUTPUT 
,@OutPut_Message OUTPUT 
SELECT @OutPut_Message 

后,我执行我收到SQL输出窗口中下面的输出

69111E97 - 贝德-4BDE-9EBE-C063DB690E9F.xls

我已经创建了文件夹的权限按照下面的截图

Folder

enter image description here

回答

0

这个问题得到解决,我登录到通过RDP服务器和我执行的SP按下面和它的工作..

DECLARE @OutPut_Number INT; 
DECLARE @OutPut_Message VARCHAR(1000); 
EXECUTE dbo.Copy_DataDump_SpecificQuery 'SELECT O.ID AS SystemNumber 
     ,O.Date AS InvoiceDate 
     ,OT.ID AS CustomerCode 
     ,OT.Name AS CustomerName 
     ,I.ID AS ItemID 
     ,I.Description AS Item 
     ,OL.UnitQty 
     ,OL.FreeQty 
     ,OL.UnitPrice 
     ,OL.GrossValue 
     ,NetSaleValue 
     ,A.ID AS SalesRepCode 
     ,ItemCostPrice = OL.UnitPrice 
    FROM TxnOrder O 
     INNER JOIN TxnOrderLine OL ON O.UID = OL.TxnOrderUID AND O.SiteUID = Ol.TxnOrder_SiteUID 
     INNER JOIN Outlet OT ON O.OutletUID = OT.UID 
     INNER JOIN Item I ON OL.ItemUID = I.UID 
     INNER JOIN Agent A ON O.AgentUID = A.UID 
    WHERE O.mpt_TypeEnum = 1 
     AND(O.IsPrinted = 1 OR O.mpt_SalesmodelEnum = 2)' 
,@OutPut_Number OUTPUT 
,@OutPut_Message OUTPUT 
SELECT @OutPut_Message 

,在我的SELECT查询我删除了以下几列

'' AS ManualNumber 
    DueDate = '' 

和作为即时通讯已经拥有访问通过RDP服务器的权限,我更换了以下路径如下

SET @FilePath = '\\ComputerName\Users\MyUserName\Downloads\Exel_File' + @Output_FIleName 

C:\ Users \用户Pathuma \下载\ EXCEL SET @FilePath = '\ C:\ Users \用户名为myUsername \下载\ EXCEL' + @Output_FIleName