これはおそらく答えるのが簡単な質問ですが、私にはわかりません。
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" が見つからないか、名前があいまいです。
何か案は?