首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将SQL Server 2008存储过程导入Excel 2016时出现错误

将SQL Server 2008存储过程导入Excel 2016时出现错误
EN

Stack Overflow用户
提问于 2018-06-09 05:09:36
回答 2查看 290关注 0票数 0

我正在将SQL Server 2008中的存储过程导入Excel 2016,但在Excel中执行时出现错误:

将数据类型nvarchar转换为date时出现

错误

这是存储过程[LA_VOTER].[Temp].[dmv_import]

代码语言:javascript
复制
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:           Arash B
-- Create date: 6/5/2018
-- Description:      test for creating dynamic 'Data Entry Signature Verification' worksheeet
-- =============================================
ALTER PROCEDURE [Temp].[dmv_import]
    @date DATE = NULL
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @date_work DATE

    IF @date IS NULL
       SET @date_work = GETDATE()
    ELSE
       SET @date_work = @date 

    /*count of processed*/
    SELECT 
        vi.import_code as 'DMV Category',
        SUM(CASE WHEN CONVERT(date, vi.createdate, 101) = @date_work THEN 1 ELSE 0 END) AS 'received',
        SUM(CASE WHEN CONVERT(date, vi.processed_date, 101) = @date_work THEN 1 ELSE 0 END) AS 'processed'
    FROM 
        DIMSNet.dbo.voter_import vi
    WHERE 
        vi.import_type IN ('DMV')
        AND import_code < 13
    GROUP BY 
        import_code
END

我在Excel中通过数据访问它-从下面显示的其他来源。

我从SQL中选择并输入“slavote-dr1”作为要连接的服务器;按照指示“DIMSNet”所选表和任何随机表。

当我到达“导入数据”弹出窗口时,我在excel工作表中选择要将表格拖放到其中的单元格,然后单击“属性”按钮。

选择“Definition”选项卡并将命令类型更改为“SQL”。

在“命令文本框”中输入可执行文件。由于数据库用于连接,因此我在命令行中插入了存储过程的完整路径。

代码语言:javascript
复制
Execute "LA_VOTER"."Temp"."dmv_import" ","

我点击“OK”并返回到“Import Data”窗口。我点击“Ok”来导入表格。

我得到了上面提到的错误。

我看了看脚本,看不出这个错误是从哪里来的。你有什么建议吗?

PS。新增6/12/18 - SP在SQL中运行正常。只有在导入到Excel中时,才会出现问题。

EN

回答 2

Stack Overflow用户

发布于 2018-06-09 06:04:29

故障无疑出在存储过程中。几乎可以肯定的是,它在以下几行:

代码语言:javascript
复制
sum(case when convert(date, vi.createdate, 101) = @date_work then 1 else 0 end) as received,
sum(case when convert(date, vi.processed_date, 101) = @date_work then 1 else 0 end) as processed

我建议您找到数据中的问题并修复它们。您可以通过执行以下操作来解决此问题:

代码语言:javascript
复制
sum(case when isdate(vi.createdate) = 0 then 0
         when convert(date, vi.createdate, 101) = @date_work then 1 
         else 0
    end) as received,
sum(case when isdate(vi.processed_date) = 0 then 0
         when convert(date, vi.processed_date, 101) = @date_work
         then 1
         else 0
    end) as processed
票数 0
EN

Stack Overflow用户

发布于 2018-06-16 00:40:35

OK使用了一种不同的方法,并使其工作。使用"From Microsoft Query“,我的执行脚本是:{CALL LA_VOTE.tmp.dmv_import(?)},它将我需要的数据导入到我想要的字段中。

http://codebyjoshua.blogspot.com/2012/01/get-data-from-sql-server-stored.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档