SQL Server 2000でCROSS APPLYに相当するものを使用するにはどうすればよいですか?CROSS APPLYはSQL Server 2000で動作しませんか?
私は、渡されたIDのトップレベルの親を返す関数を持っています。
INSERT INTO @TopRiskCat
SELECT R.rskid
,a.topParentRiskCat AS TopLevelRiskCat
FROM RISKS R
INNER JOIN RiskAnalysis RA
ON R.rskId = RA.ranRiskId
INNER JOIN RiskCategory RC
ON RA.ranRiskAnalId = RC.rctId
CROSS APPLY fn_GetTopParentRiskCategory(RC.rctid) as a
を次のようにクエリで使用
ALTER Function [dbo].[fn_GetTopParentRiskCategory]
(
@RctId int
)
RETURNS @TEMP_TABLE TABLE
(
rctId int,
topParentRiskCat Varchar(100)
)
AS
BEGIN
DECLARE @PARENTID INT
DECLARE @GRANDPARENTID INT
DECLARE @CODE VARCHAR(100)
DECLARE @DESC VARCHAR(100)
DECLARE @PARENTCODE VARCHAR(100)
SELECT @PARENTID= rctParentID from RiskCategory where [email protected]
SELECT @GRANDPARENTID= rctParentId from RiskCategory where rctid= @PARENTID
IF @GRANDPARENTID IS NULL
BEGIN
SELECT @CODE='ALL'
INSERT INTO @TEMP_TABLE SELECT @Rctid,@CODE
END
ELSE
BEGIN
SELECT @CODE=''
SELECT @DESC=rctDescription from RiskCategory where [email protected]
WHILE(@PARENTID IS NOT NULL)
BEGIN
SELECT @PARENTCODE=rctCode from RiskCategory WHERE [email protected]
IF @PARENTCODE='All'
SET @PARENTCODE=''
SELECT @[email protected] +'.'+ @CODE
SELECT @PARENTID =rctParentID from Riskcategory where rctid= @PARENTID
END
SELECT @CODE=Substring(@[email protected],2,len(@[email protected]))
INSERT INTO @TEMP_TABLE SELECT @RctID,@CODE
END
RETURN
END
それは私が明日リリース持っている2000年では動作しません。助けてください !!
使用する機能は、常に1つの結果だけを返すと私は
おかげ
DDL)、我々は別の解決策を提案することができます。 –
お返事ありがとうございました。私は上記の関数で以下のクエリに参加する必要があるクエリを持っています。この関数は、動的ツリーに対して実際に解析し、最上位の親カテゴリを取得します。 –
それは価値があるので、あなたの関数は与えられたrctidの親ツリーを計算しているようです。常に1つのレコードしか返しません。 1つのVARCHARを返すように関数を変更し、CROSS APPLYではなくselectで呼び出します。 –