【问题标题】:Function SELECT that returns a row in SQL SERVER 2012在 SQL SERVER 2012 中返回一行的函数 SELECT
【发布时间】:2017-10-30 20:35:53
【问题描述】:

我想创建一个从我的表中获取最后一条记录的函数,但它不起作用。

我的代码是:

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

感谢您的帮助

PS:我是 SQL 新手

【问题讨论】:

  • 你的桌子上有ID col吗?
  • 您将 CT_NUM 限制为单个值,然后按其排序。因此,它是一个常量,并且可能会返回任何具有匹配值的行。 SQL 表代表 无序 集。没有“最后”行,除非列指定了顺序。
  • 你的函数没有意义。为什么你甚至想要一个函数开头?请编辑您的问题以包含示例数据和所需结果。
  • 是的,CT_Num 是 ID。
  • 'i(t) didn't work' 不是问题描述。

标签: sql sql-server database sql-function


【解决方案1】:

您可以尝试以下一个以根据某些唯一列值获取最后一行。

CREATE FUNCTION GetRowData
(
)
RETURNS TABLE
AS
RETURN (
    SELECT TOP 1 * FROM F_REGLEMENTT ORDER BY CT_Num DESC 
)
END

【讨论】:

    【解决方案2】:
    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])
    

    【讨论】:

      【解决方案3】:

      尝试返回整行而不是 CT_Num,如下所示:

      CREATE FUNCTION dbo.GetLastReglement (@CT_Num VARCHAR(17)
      )
      RETURNS TABLE as RETURN (
        SELECT top (1) * 
        FROM F_REGLEMENTT
        WHERE CT_Num=@CT_Num
        ORDER BY CT_Num DESC
      )
      END
      

      【讨论】:

      • 我得到了这个问题 Msg 156, Niveau 15, État 1, Procédure GetLastReglement, Ligne 24 Syntaxe wronge vers le mot clé 'AS'。 Msg 178, Niveau 15, État 1, Procédure GetLastReglement, Ligne 25 Une 指令 RETURN avec une valeur de retour ne peut être utilisée dans ce contexte。
      【解决方案4】:

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

      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 CT_Num=@CT_Num
          order by CT_Num desc
      return;
      end
      

      【讨论】:

      • 如果我只想返回账单号码,为什么这个代码不起作用? CREATE FUNCTION dbo.GetLastFatt (@DO_Piece VARCHAR(9) ) RETURNS varchar9 as RETURN ( SELECT top (1) DO_Piece FROM F_DOCENTETE WHERE DO_Type =6 ORDER BY DO_Piece DESC )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多