2013-10-30 119 views
1

測試我的第一個表值函數,即使在SELECT工作時,我也沒有收到數據。
不返回任何東西:表值函數不返回數據

select * from GetMvtHistory('C1505 BLACK') 

返回正確的數據:

select row_number() OVER (order by DocId) as Id, detailId, Quant, 0 as Cumul 
    FROM vwDetailsHist 
    WHERE refer = 'C1505 BLACK' 
    ORDER BY DocId; 

TVF代碼:

ALTER FUNCTION [dbo].[GetMvtHistory] 
(@Ref char(10)) 
RETURNS @MvtHist table 
(
Id int, 
[DetailId] int NULL, 
[Quant] int NULL, 
[Cumul] int NULL 
) 
WITH EXEC AS CALLER 
AS 
BEGIN 
INSERT into @MvtHist 
    select row_number() OVER (order by DocId) as Id, detailId, Quant, 0 as Cumul 
     FROM vwDetailsHist 
     WHERE refer = @Ref 
     ORDER BY DocId; 

RETURN 

我在想什麼?謝謝 !

+0

vwDetailsHist.refer是什麼類型? – usr

+1

這也不需要是一個多語句TVF。內聯TVF通常表現更好。 –

回答

2

您已將參數設置爲char(10)。我無法想象這是您需要的數據類型。您可能應該使用列所具有的相同數據類型(可能應該是nvarchar)。

'C1505 BLACK'是11個字符。不適合。

+0

Oooops。我現在感到很蠢。你完全正確。謝謝。 @Ref確實是Varchar(15) –

+0

確保將字符串數據類型修復爲更長的nvarchar類型。這擺脫了這樣和其他問題。 – usr

0

設置@Ref參數爲50higher。例如:

@Ref varchar(500) 

這將解決您的問題。

+2

雖然如果'ref'被索引並且實際上是'varchar'而不是'nvarchar',使用這個數據類型可以防止索引查找。 –