2017-05-30 120 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]) 
相关问题