2012-06-15 66 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中創建視圖並從簡單視圖中選擇數據.. –

相關問題