Sql server 在具有可变列数的T-SQL返回表中具有表值函数

Sql server 在具有可变列数的T-SQL返回表中具有表值函数,sql-server,tsql,pivot,clr,sqlclr,Sql Server,Tsql,Pivot,Clr,Sqlclr,T-SQL中的表值函数是否可以返回列数可变的表? 列名可以是1、2、…、n 现在我有一个字符串拆分函数,它返回一个单列的1xn表,然后我将该表转换为一个nx1表,但我更愿意通过返回正确的表格式来简化这个过程 我打算用C语言中的CLR过程来实现这个函数,我只是不知道如何设置用户定义的函数以我想要的格式返回数据:根据输入字符串,列数可变。不可能从表值函数TVF返回非静态结果集,无论是用T-SQL还是.NET/SQLCLR编写。只有存储过程才能动态创建结果集 基本上,任何函数都需要返回一致的结果类型,

T-SQL中的表值函数是否可以返回列数可变的表? 列名可以是1、2、…、n

现在我有一个字符串拆分函数,它返回一个单列的1xn表,然后我将该表转换为一个nx1表,但我更愿意通过返回正确的表格式来简化这个过程


我打算用C语言中的CLR过程来实现这个函数,我只是不知道如何设置用户定义的函数以我想要的格式返回数据:根据输入字符串,列数可变。

不可能从表值函数TVF返回非静态结果集,无论是用T-SQL还是.NET/SQLCLR编写。只有存储过程才能动态创建结果集

基本上,任何函数都需要返回一致的结果类型,无论是标量值还是集合(即结果集)

但是,在SQLCLR存储过程中,可以通过创建动态结果集。只要你没有明确的需要选择。。。这样,存储过程就可以工作了

当然,您也可以在T-SQL中这样做,使用动态SQL根据分割函数的输出构造SELECT语句


这在很大程度上取决于需要使用此功能的确切上下文。

我知道如何使用SqlMetaData在CLR存储过程中创建结果集,但对于用户定义的函数也可以这样做吗?不,SqlMetaData仅适用于存储过程。正如我在回答中提到的,函数(无论使用何种语言)必须返回一致/预定义的类型。对于CLR函数,您可以定义一个结构以将数据传递回函数decorator中的表定义。没有办法使这两个地方都充满活力。如果您能使函数结果集动态化,我会很高兴,但这不会发生。该功能在SQL标准2016中定义,t-SQL不支持