2017-05-30 124 views
-1

我想創建一個從我的表中獲取最後一條記錄的函數,但它不起作用。函數SELECT返回SQL SERVER 2012中的一行

我的代碼是:

CREATE FUNCTION GetLastReglement (@CT_Num VARCHAR(17)) 
RETURNS VARCHAR(17) 
AS 
BEGIN 
    SELECT TOP (1) * 
    FROM F_REGLEMENTT 
    WHERE [email protected]_Num 
    ORDER BY CT_Num DESC 
RETURN @CT_Num 
END 

感謝您的幫助

PS:我是新手,在SQL

+0

是桌子上有沒有ID號? – XMozart

+1

您正將'CT_NUM'限制爲單個值,然後按順序排序。因此,它是一個常量,任何具有匹配值的行都可能被返回。 SQL表格表示*無序*集合。沒有「最後一行」,除非列指定了排序。 –

+1

你的功能沒有意義。爲什麼你甚至想要一個功能開始?請編輯您的問題以包含樣本數據和期望的結果。 –

回答

0

您可能需要使用返回表如下

CREATE FUNCTION GetLastReglement (@CT_Num varchar(17)) 
returns @rtTable table 
(
    --columns in your table F_REGLEMENTT with datatype as below 
    col1 nvarchar(50) 
    ... 
) 
as 
begin 
    insert into @rtTable 
    select top (1) * 
    from F_REGLEMENTT 
    where [email protected]_Num 
    order by CT_Num desc 
return; 
end 
+0

如果我只想返回賬單號碼,爲什麼這個代碼不起作用? 'CREATE FUNCTION dbo.GetLastFatt(@DO_Piece VARCHAR(9) ) RETURNS varchar9爲RETURN( SELECT(1)頂部DO_Piece FROM F_DOCENTETE WHERE DO_Type = 6 ORDER BY DO_Piece DESC )' –

1

你可以試試下面一個基於一些獨特的列值來獲得最後一行。

CREATE FUNCTION GetRowData 
(
)RETURNS TABLE 

AS RETURN ( SELECT TOP 1 * FROM F_REGLEMENTT ORDER BY CT_Num DESC ) END

0

嘗試整行,而不是CT_Num返回如下:

CREATE FUNCTION dbo.GetLastReglement (@CT_Num VARCHAR(17) 
) 
RETURNS TABLE as RETURN (
    SELECT top (1) * 
    FROM F_REGLEMENTT 
    WHERE [email protected]_Num 
    ORDER BY CT_Num DESC 
) 
END 
+1

我遇到此問題 Msg 156,Niveau 15,1,ProcédureGetLastReglement,Ligne 24 Syntaxe incorrecte vers le motclé'AS 」。 Msg 178,Niveau 15,1,ProcédureGetLastReglement,Ligne 25 用戶指南RETURN avec une valeur de retour ne peutêtreutiliséedans ce contexte。 –

+0

更新了它,請再試一次... –

+0

它的工作原理,非常感謝 –

0
You could use the MAX function instead of top(1)* 

CREATE FUNCTION [dbo].[GetLastReglement]() 
RETURNS TABLE 
AS 
RETURN 
SELECT * FROM [F_REGLEMENT] WHERE CT_NUM = 
(SELECT MAX(CT_NUM) FROM [F_REGLEMENT]) 
相關問題