从 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 中的函数输入和输出表的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server存储过程中使用表值作为输入参数示例

有一个表格,其中包含国家和城市列,如下表输入所示。我需要如下所述的输出

将 XML 输出放回表中的函数

流分析 - 看不到输出

水壶 '?'不工作表输入步骤

SQL 从临时表插入表,并将输出插入临时表