需要替代使用SQL Server 2000的交叉应用吗
我编写了以下脚本,该脚本使用CROSS-APPLY参数在我的SQL Server 2008 developer数据库中运行良好,但对于拥有SQL Server 2000数据库且不希望更改SSMS中的兼容性设置的客户端,它将不起作用 有人能建议一种方法来转换我下面的脚本,以便不使用交叉应用参数吗?谢谢需要替代使用SQL Server 2000的交叉应用吗,sql,sql-server,Sql,Sql Server,我编写了以下脚本,该脚本使用CROSS-APPLY参数在我的SQL Server 2008 developer数据库中运行良好,但对于拥有SQL Server 2000数据库且不希望更改SSMS中的兼容性设置的客户端,它将不起作用 有人能建议一种方法来转换我下面的脚本,以便不使用交叉应用参数吗?谢谢 DECLARE @Flag INT SET @Flag = 1 WHILE (@Flag < (SELECT TOP 1 (COUNT(CUSTOMERPN)) AS COUNTCUST FR
DECLARE @Flag INT
SET @Flag = 1
WHILE (@Flag < (SELECT TOP 1 (COUNT(CUSTOMERPN)) AS COUNTCUST FROM FC_Nestle
GROUP BY CustomerPN
ORDER BY COUNTCUST DESC))
BEGIN
--UPDATE AFS_TOPRODUCE COUNTS
UPDATE FC_Nestle
SET AFS_ToProduce = CustReqQty - AFS_OH
--UPDATE SUBSEQUENT AFS_OH INVENTORY COUNTS
update FC_Nestle
set AFS_OH = - fc2.AFS_ToProduce
from FC_Nestle
CROSS APPLY
(
select fc2.AFS_ToProduce
from
(
select top 1
fc2.AFS_ToProduce
from FC_Nestle fc2
where fc2.ForecastID < FC_Nestle.ForecastID and fc2.CustomerPN = FC_Nestle.CustomerPN
order by fc2.ForecastID desc
) fc2
where fc2.AFS_ToProduce < 0
) fc2
where FC_Nestle.AFS_ToProduce > 0
SET @Flag = @Flag + 1
END
这将帮助您:
update fc_test
set AFS_OH = - fc2.AFS_ToProduce
from fc_test
-- Self join to find previous row
inner join fc_test fc2
-- which has lower forecastid
on fc2.ForecastID < fc_test.ForecastID
where fc_test.AFS_ToProduce > 0
-- and negative afs_toproduce
and fc2.afs_toproduce < 0
-- and is a row immediately before
-- ie there is no other row closer to fc_test then current fc2
and not exists (select null
from fc_test fc3
where fc3.forecastid > fc2.forecastid
and fc3.ForecastID < fc_test.ForecastID)
我使用的表和列名与上次相同
Live test位于。欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以精确地格式化和语法突出显示它!哦,伙计,你真的不应该重复使用你给派生表的别名,我在同一个查询中计算了三个不同的fc2表,我记得你上次帮过我。我需要把它放在我的While循环中,还是像你在这里一样运行它?我在循环中运行了脚本,它没有修改任何记录。我看了代码,但没有看到任何明显的东西。再次感谢你,尼古拉@ToddS的想法是用这个更新替换原始更新,但是您应该用真实的表名替换表名,并添加CustomerPN过滤器。欢迎各位:-