2012-12-13 90 views
0

我正在使用SQL Server 2008R2並且我有以下腳本。SQL函數不返回與正常查詢相同的內容

select * from orderSummaryTotal(@orderid,@sessionid) 

select 
    count(*) as Quantity, 
    IsNull(Sum(VatAmount),0) As VATAmount, 
    IsNull(Sum(NetAmount),0) As NetAmount, 
    IsNull(Sum(GrossAmount),0) as GrossAmount 
from tbOrderProduct 
where 
    Orderid = @orderid 
and sessionid = @sessionid 

當我運行第二個查詢它返回我的值。即3

一個數量然而,當我運行第一查詢返回我的0

一個數量第一次查詢是一個表值函數以下是代碼。

ALTER FUNCTION [dbo].[OrderSummaryTotal](@orderid varchar, @sessionid uniqueidentifier) 
RETURNS TABLE as 
RETURN 
    select 
     count(*) as Quantity, 
     IsNull(Sum(VatAmount),0) As VATAmount, 
     IsNull(Sum(NetAmount),0) As NetAmount, 
     IsNull(Sum(GrossAmount),0) as GrossAmount 
    from tbOrderProduct 
    where 
     Orderid = @orderid 
    and sessionid = @sessionid 

兩個查詢都是相同的,但是如何返回一個3而另一個不是?有任何想法嗎?

+0

你可以在兩個地方限定'tbOrderProduct'的名字是'Database.Schema.tbOrderProduct'嗎?你還有不同的答案嗎? –

+0

如何在沒有模式限定符的情況下使用表值函數? –

回答

4

原因是你的函數定義中有varchar沒有長度。

嘗試將其更改爲varchar(8000)之類的東西,或者數量足夠大以適合您的需求。

+3

或者最好與* Orderid列的*類型和長度完全相同。 :) –