我正在创建一个导入过程,我最终需要SELECT几个字段以及一个计算值。计算值的逻辑相当复杂,我需要在UDF中而不是在SELECT本身中进行。
问题是计算出的值是由30-40列的内容决定的...我考虑过:
有什么想法可以提供更好的解决方案?我倾向于最后一个。
进一步恶化这种情况是数据不在我计划运行UDF的服务器上,并且该服务器较旧(不支持FOR JSON子句)。但我可以用OpenQuery()笨拙地解决这个问题。
答案 0 :(得分:1)
您可以传递单个TVP(表值参数),而不是传递多个参数。
方法1:
CREATE TYPE MyTableType AS TABLE
( param1 VARCHAR(50)
, param2 INT
, param3 DATE );
CREATE FUNCTION dbo.my_func(@tvp_params MyTAB)
RETURNS TABLE
AS RETURN (
SELECT ...
FROM ...
JOIN @tvp_params ...
);
方法2:
CREATE TYPE myEAVTableType AS TABLE
( param_id INT
,param_name VARCHAR(128)
,param_value SQL_VARIANT);
在函数内部执行某种PIVOT
。