2017-10-29 28 views
0

我必须处理一个表的数值做一些修改类似下面更新集合中选择其中条件使用功能的T-SQL的SQL Server

DECLARE @tmpMap TABLE(Ptc int, Path int); 

INSERT INTO @tmpMap(Ptc, Path) 
    SELECT ContactPointId_fk, PathId_fk 
    FROM t_PathContactPoint 

UPDATE @tmpMap 
SET Path = (SELECT dbo.HKA_GetLeafIDFromPath(Path)) 

正如你可以看到我创建临时表,让我来处理计算用我创建的标量函数返回int。

我想要做的是指定我只需要更新函数的结果不同于-1的行。

UPDATE @tmpMap 
SET Path = (SELECT dbo.HKA_GetLeafIDFromPath(Path) 
WHERE (the result of the function is different from -1)) 

有关如何在SQL Server中使用T-SQL实现这一点的任何想法吗?

回答

1

使用APPLY

UPDATE t 
SET Path = g.LeafId 
FROM @tmpMap t CROSS APPLY 
    (VALUES (dbo.HKA_GetLeafIDFromPath(Path))) g(LeafId) 
WHERE g.LeafId <> -1; 
+0

我得到了以下错误:表值函数“HKA_GetLeafIDFromPath”不能有列别名。 –

+0

只需修改您的答案,并将CROSS APPLY(选择dbo.HKA_GetLeafIDFromPath(Path))作为g(LeafId)即:add select在函数调用之前,并将其检查为有效答案。感谢您指出了解决我的问题的CROSS APPLY。 –

+1

@KarouiHaythem。 。 。咄。它不是一个表值函数,它只是一个常规函数。我会更典型地用'values()'做这个。 –