2012-06-15 39 views
0

这可能是一个容易回答的问题,但我无法弄清楚。使用SQL Server 2008中的导出数据选项时出现错误功能

我有这个查询,我想要导出到Excel。我遵循详细的指令here,但由于使用了前面定义的函数,因此sql查询不正确。

这是我定义的函数:我要导出到Excel

CREATE FUNCTION FullMonthsSeparation 
(
    @DateA DATETIME, 
    @DateB DATETIME 
) 

RETURNS INT 
AS 
BEGIN 
DECLARE @Result INT 

DECLARE @DateX DATETIME 
DECLARE @DateY DATETIME 

IF(@DateA < @DateB) 
BEGIN 
    SET @DateX = @DateA 
    SET @DateY = @DateB 
END 
ELSE 
BEGIN 
    SET @DateX = @DateB 
    SET @DateY = @DateA 
END 

SET @Result = (
    SELECT 
    CASE 
     WHEN DATEPART(DAY, @DateX) > DATEPART(DAY, @DateY) 
      THEN DATEDIFF(MONTH, @DateX, @DateY) - 1 
     ELSE DATEDIFF(MONTH, @DateX, @DateY) 
    END 
) 
RETURN @Result 
END 
GO 

这是SQL查询:

SELECT DISTINCT soc.idSocio, 
       (SELECT Count(*) 
       FROM [BaseSR].[dbo].[Movimiento] m 
       WHERE m.idSocio = soc.idSocio 
         AND m.TipoMovimiento = 1) AS CantidadDeCompras, 
       nombre, 
       (SELECT TOP 1 fecha 
       FROM [BaseSR].[dbo].[Movimiento] m 
       WHERE m.idSocio = soc.idSocio 
         AND m.TipoMovimiento = 1/*Consumos*/ 
       ORDER BY fecha DESC) AS UltimoMovimiento, 
       dbo.Fullmonthsseparation(soc.fechaAlta, Getdate()) AS MesesDesdeAltaEnPrograma 
FROM [BaseSR].[dbo].[Socio] soc 
WHERE soc.idTarjeta LIKE '2001%' 

这是错误消息我得到:

声明无法解析。附加信息:延迟 准备无法完成。声明无法准备。 无法找到列“dbo”或用户定义的函数或 集合“dbo.FullMonthsSeparation”,或名称不明确。

但是,当我执行查询时,它运行没有任何问题。

如果我改变了SQL查询[BaseSR].dbo.FullMonthsSeparation(...那么错误是:

声明无法解析。附加信息:延迟 准备无法完成。声明无法准备。 无法找到列“BaseSR”或用户定义的函数或集合“BaseSR.dbo.FullMonthsSeparation”,或名称不明确。

任何想法?

回答

1

你已经证明数据库名称无处不在,这表明执行上下文不是[BaseSR],这可以解释为什么可能找不到函数。

尝试做相同的功能:

[BaseSR].dbo.FullMonthsSeparation(... 
+0

我试过......它没有工作。我编辑了我的问题,添加了我得到的错误消息 – Soph

+0

什么是'SanRoque'? - 你问题中的数据库名称是'BaseSR' –

+0

是的,我改变了! – Soph

0

我建议采取简单的way-从那里创建视图和导出数据! :)

+0

你的意思是手动将结果复制到Excel?我一直在这样做,但我想学习这样做,这似乎更整洁! :) – Soph

+0

我的意思是在sql server中创建视图并从简单视图中选择数据.. –

相关问题