TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句

Posted

技术标签:

【中文标题】TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句【英文标题】:TSQL Error: A RETURN statement with a return value cannot be used in this context 【发布时间】:2013-06-01 03:12:53 【问题描述】:

我只是想创建一个返回 select 语句的函数,但它给出了错误:

在此上下文中不能使用具有返回值的 RETURN 语句。

这是我的代码:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
RETURN(
 SELECT * FROM View_sls
)

请告诉我解决办法

【问题讨论】:

【参考方案1】:

两件事:

您需要定义要返回的表的结构 您需要将数据添加到该表中

那么你可以调用RETURN;将该表的数据返回给调用者。

所以你需要这样的东西:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS @returnTable TABLE 
                     (ContactID int PRIMARY KEY NOT NULL, 
                      FirstName nvarchar(50) NULL, 
                      LastName nvarchar(50) NULL, 
                      JobTitle nvarchar(50) NULL, 
                      ContactType nvarchar(50) NULL)
AS 
BEGIN
    INSERT INTO @returnTable
        SELECT ContactID, FirstName, LastName, JobTitle, ContactType
        FROM dbo.View_sls

    RETURN;
END 

【讨论】:

我的table view_sls真的很大,不想一一定义所有的列,有没有替代方案? 我假设 OP 想要一个内联 TVF,而不是一个多语句的【参考方案2】:

语法错误,仅此而已。当你有一个“内联表值函数”时,你不需要BEGIN

参见CREATE FUNCTION 和示例 B

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
RETURN
(
 SELECT * FROM View_sls
);
GO

【讨论】:

给出错误无法对“dbo.xxxx”执行更改,因为它是不兼容的对象类型 @KrunalShah:这是一种不同类型的函数,所以 DROP 和 CREATE。它们是 3 种 UDF 我放弃了它并创建了它 - 仍然给我同样的错误! @KrunalShah:问一个新问题。与此无关。【参考方案3】:

你需要描述返回的表,填充它,然后RETURN

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS @RESULTS TABLE
(
  ID int, <other fields>
)
AS BEGIN

  INSERT @T
    <select ...>

  RETURN
END

【讨论】:

我的table view_sls真的很大,不想一一定义所有的列,有没有替代方案?

以上是关于TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句的主要内容,如果未能解决你的问题,请参考以下文章

错误:必须在此上下文(Rust)/ serde_json值中知道此值的类型

使用 TSQL 从 XML 中删除具有特定值的节点

TSQL - 列中所有非零值的平均值

Thymeleaf:在此上下文中只允许返回数字或布尔值的变量表达式

在此上下文中仅允许返回数字或布尔值的变量表达式

org.thymeleaf.exceptions.TemplateProcessingException:在此上下文中只允许返回数字或布尔值的变量表达式