Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将存储过程结果导出到excel_Excel_Sql Server 2014_Data Dump - Fatal编程技术网

将存储过程结果导出到excel

将存储过程结果导出到excel,excel,sql-server-2014,data-dump,Excel,Sql Server 2014,Data Dump,关于将存储过程结果导出到excel文件,本论坛可能会提出类似的问题,我尝试了几次,但该文件没有导出到我期望的文件夹中,非常感谢您的帮助 我创建的存储过程 /****** 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 PRO

关于将存储过程结果导出到excel文件,本论坛可能会提出类似的问题,我尝试了几次,但该文件没有导出到我期望的文件夹中,非常感谢您的帮助

我创建的存储过程

/****** 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

参数

DECLARE@OutPut\u Number INT;
声明@OutPut_Message VARCHAR(1000);
执行dbo.Copy\u DataDump\u SpecificQuery'选择O.ID作为系统号
,“”作为手动编号
,O.Date作为发票日期
,OT.ID作为客户代码
,OT.Name作为客户名称
,I.ID作为ItemID
,I.作为项目的描述
,OL.单位数量
,OL.免费数量
,OL.单价
,OL.GrossValue
,NetSaleValue
,DueDate=“”
,A.ID作为SalesRepCode
,ItemCostPrice=OL.UnitPrice
来自TxnOrder O
O.UID=OL.TXNODERUID和O.SiteUID=OL.TXNODER\U SiteUID上的内部联接TXNODERLINE OL
O.OutletUID=OT.UID上的内部连接出口OT
OL.ItemUID=I.UID上的内部联接项I
O.AgentUID=A.UID上的内部联接代理A
其中O.mpt_TypeEnum=1
和(O.IsPrinted=1或O.mpt\u SalesmodelEnum=2)

--和O.Date>=@StartDate和O.Date此问题已解决,我通过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 = ''
由于Im已经拥有通过RDP访问服务器的权限,我将以下路径替换为

SET @FilePath = '\\ComputerName\Users\MyUserName\Downloads\Exel_File' + @Output_FIleName 
C:\Users\Pathuma\Downloads\Excel 设置@FilePath='\C:\Users\MyUsername\Downloads\Excel'+@Output\u FIleName

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