0

这可能是一个容易回答的问题,但我无法弄清楚。

我有这个要导出到 Excel 的查询。我按照这里详述的说明进行操作,但是由于使用了我之前定义的函数,因此 sql 查询不正确。

这是我定义的函数:

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

这是我要导出到 Excel 的 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”,或者名称不明确。

有任何想法吗?

4

2 回答 2

1

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

尝试对函数执行相同的操作:

[BaseSR].dbo.FullMonthsSeparation(...
于 2012-06-15T14:59:13.370 回答
0

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

于 2012-06-15T15:00:52.260 回答