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

时间:2011-04-11 15:08:42

标签: sql-server tsql pivot clr sqlclr

是否可以在T-SQL中使用表值函数返回具有可变列数的表? 列名可能只是1, 2, …, n

现在我有一个“字符串拆分”功能,它返回一个单柱1 x n表,然后我将表转移到n x 1表,但我宁愿简化流程返回正确的表格格式开头。

我打算在C#中使用CLR程序来实现这个功能,我只是不知道如何设置用户定义的函数以我想要的格式返回我的数据:具有可变数量的列,取决于输入字符串。

1 个答案:

答案 0 :(得分:1)

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

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

但是,在SQLCLR存储过程中,您可以通过SqlMetaData创建动态结果集。只要您没有SELECT ... FROM它的明确需要,那么存储过程可能会有效。

当然,您也可以在T-SQL中完成此操作,使用动态SQL根据拆分函数的输出构造SELECT语句。

其中很多都归结为需要使用此功能的确切环境。