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值中知道此值的类型
Thymeleaf:在此上下文中只允许返回数字或布尔值的变量表达式
org.thymeleaf.exceptions.TemplateProcessingException:在此上下文中只允许返回数字或布尔值的变量表达式