表值函数,动态列名

时间:2016-07-07 09:46:30

标签: sql-server

有没有办法在表值函数中命名列,具体取决于用户对函数的输入?

假设有一些功能:

foo(1,2,3)

所以需要三个整数输入。现在假设我想在表格中返回列名称:'1 some text','2 some text','3 some text'。

这可能吗?

3 个答案:

答案 0 :(得分:1)

如果您需要SP方法,可以使用

进行扩展
x

答案 1 :(得分:1)

没有。表值函数 - 多语句TVF,内联TVF或SQLCLR TVF - 需要返回一致/确定性结果集。这类似于需要始终返回相同数据类型的标量UDF(T-SQL和SQLCLR)。

实际上,任何TVF返回的结果集,无论TVF的类型如何,都是在创建TVF时在系统元数据中定义的,并且在运行时无法更改。您可以使用以下查询查看定义:

SELECT so.type_desc AS [ObjectType], so.[name] AS [ObjectName], sc.*
FROM sys.columns sc
INNER JOIN sys.objects so
        ON so.[object_id] = sc.[object_id]
WHERE so.type_desc NOT IN ('SYSTEM_TABLE', 'USER_TABLE', 'INTERNAL_TABLE',
                           'VIEW', 'TYPE_TABLE')
ORDER BY so.[type_desc], so.[name], sc.column_id;

对于ObjectType,您可以获取具有以下值的条目:

  • CLR_TABLE_VALUED_FUNCTION
  • SQL_INLINE_TABLE_VALUED_FUNCTION
  • SQL_TABLE_VALUED_FUNCTION

答案 2 :(得分:0)

这可以通过使用动态SQL来实现,但请记住,你不能在函数中使用它。尝试创建一个SP ..