2017-10-29 38 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()'做這個。 –