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 に答える