从 SQL 中的函数输入和输出表
Posted
技术标签:
【中文标题】从 SQL 中的函数输入和输出表【英文标题】:Input and output a table from a function in SQL 【发布时间】:2018-06-15 23:06:48 【问题描述】:我想在 T-SQL 中创建一个函数,用于输入和输出用户定义表类型的实例。但是,在RETURN
语句的那一行,它抛出了一个错误:
必须声明标量变量@output_table
我的代码:
CREATE FUNCTION FUNC_NAME
(@input_table TableType READONLY,
@other_param VARCHAR(255))
RETURNS TableType
AS
BEGIN
DECLARE @output_table TableType;
INSERT INTO @output_table (Col1, Col2, Col3)
SELECT column1, column2, column3
FROM SOME_TABLE
WHERE column1 = @other_param;
RETURN @output_table;
END
有人可以向我解释我做错了什么吗?甚至可以创建一个输入和输出表类型变量的函数吗?如果没有,我可以使用任何替代方法吗?我正在使用 SQL Server Management Studio 2008 R2。
【问题讨论】:
谢谢。但是,我刚刚尝试过 - 现在它给了我另一个错误:“标量值函数中的返回语句必须包含一个参数。”我很困惑,因为这个函数返回一个表类型,但它不是一个表值函数? 应该是RETURNS TABLE
? this 是否相关?不确定是否使用未定义的表类型作为参数。
【参考方案1】:
您目前或至少我不知道如何也找不到示例。这有点道理,因为当您返回一个表/数据集时,它不需要是特定的表类型,因为它是一个通用数据集。
这是如何完成的:
CREATE TYPE IntTableType AS TABLE (ID INT);
GO
CREATE FUNCTION FUNC_NAME(@input_table IntTableType readonly)
RETURNS @output_table TABLE(ID VARCHAR(20))
AS
BEGIN
INSERT INTO @output_table (ID)
SELECT CONVERT(VARCHAR(20),ID)
FROM @input_table
RETURN;
END
GO
【讨论】:
可以将表变量传递给 Func_Name。有没有办法将数据库表作为参数传递? @DavidDubois 是的,查一下动态sql表参数肯定能找到解决办法以上是关于从 SQL 中的函数输入和输出表的主要内容,如果未能解决你的问题,请参考以下文章