交叉应用不适用于SQL SERVER 2000?
如何在SQLServer2000中使用与交叉应用等效的东西 我有一个函数,返回传递的id的顶级父级。交叉应用不适用于SQL SERVER 2000?,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,如何在SQLServer2000中使用与交叉应用等效的东西 我有一个函数,返回传递的id的顶级父级。 ALTER Function [dbo].[fn_GetTopParentRiskCategory] ( @RctId int ) RETURNS @TEMP_TABLE TABLE ( rctId int, topParentRiskCat Varchar(100) ) AS BEGIN DECLARE @PARENTID INT DECLARE @GRANDPARENTID
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 rctid=@RctId
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 rctid=@PARENTID
WHILE(@PARENTID IS NOT NULL)
BEGIN
SELECT @PARENTCODE=rctCode from RiskCategory WHERE rctid=@PARENTID
IF @PARENTCODE='All'
SET @PARENTCODE=''
SELECT @CODE=@PARENTCODE +'.'+ @CODE
SELECT @PARENTID =rctParentID from Riskcategory where rctid= @PARENTID
END
SELECT @CODE=Substring(@CODE+@DESC,2,len(@CODE+@DESC))
INSERT INTO @TEMP_TABLE SELECT @RctID,@CODE
END
RETURN
END
在查询中使用如下
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
它在2000年不起作用。我明天有空。请帮忙
我会很感激的
谢谢因为您使用的函数总是只返回一个结果,所以不需要交叉应用。应该可以将表值函数更改为标量值函数 SQL语句
INSERT INTO @TopRiskCat
SELECT R.rskid
, a.topParentRiskCat AS TopLevelRiskCat
, fn_GetTopParentRiskCategory(RC.rctID)
FROM RISKS R
INNER JOIN RiskAnalysis RA ON R.rskId = RA.ranRiskId
INNER JOIN RiskCategory RC ON RA.ranRiskAnalId = RC.rctId
标量值函数
ALTER Function [dbo].[fn_GetTopParentRiskCategory] (@RctId int)
RETURNS Varchar(100) AS
BEGIN
DECLARE @topParentRiskCat Varchar(100)
DECLARE @PARENTID INT
DECLARE @GRANDPARENTID INT
DECLARE @CODE VARCHAR(100)
DECLARE @DESC VARCHAR(100)
DECLARE @PARENTCODE VARCHAR(100)
SELECT @PARENTID= rctParentID from RiskCategory where rctid=@RctId
SELECT @GRANDPARENTID= rctParentId from RiskCategory where rctid= @PARENTID
IF @GRANDPARENTID IS NULL
BEGIN
SELECT @topParentRiskCat = 'ALL'
END
ELSE
BEGIN
SELECT @CODE=''
SELECT @DESC=rctDescription from RiskCategory where rctid=@PARENTID
WHILE(@PARENTID IS NOT NULL)
BEGIN
SELECT @PARENTCODE=rctCode from RiskCategory WHERE rctid=@PARENTID
IF @PARENTCODE='All'
SET @PARENTCODE=''
SELECT @CODE=@PARENTCODE +'.'+ @CODE
SELECT @PARENTID = rctParentID from Riskcategory where rctid= @PARENTID
END
SELECT @CODE=Substring(@CODE+@DESC,2,len(@CODE+@DESC))
SELECT @topParentRiskCat = @CODE
END
RETURN @topParentRiskCat
END
在SQL Server 2000中,交叉应用的
没有等效项。也许如果你解释一下你需要什么(包括相关的DDL),我们可以建议另一种解决方案。谢谢Lieven的回复。我在函数中有一个查询,我必须在上面加入下面的查询。此函数实际上解析到动态树以获取顶级父类别。它总是只返回一条记录。您应该能够更改函数以返回单个VARCHAR,并在select中调用它,而不是执行交叉应用。请您用一个小示例解释上述语句,好吗?非常正确:)我有一个查询。。如果你能回答,那就太好了。谢谢没有什么我可以添加到已经提供的答案。没关系,我已经在某种程度上优化了查询,没有索引。