基于当前行中另一列的参数,根据表达式更新表达式中具有不同值的所有行中的列

问题描述 投票:0回答:1

[最近,我已将数据库从MS Access更改为SQL Server Express,对于单身用户而言,Access是一个很棒的小型数据库,它具有非常简单的VBA功能,而我在SQL Server中却错过了它!在“我的旧访问数据库”中,我具有[帐户]表和一个子过程,该子过程使用此表达式的结果更新表中所有行中的字段:

[SortOrder] = [AccountNumber] * (10 ^ (Len(MaximumAccountNumber) - Len([AccountNumber])))


where MaximumAccountNumber is a Variable represent the Max AccountNumber in the table.

我一直在寻找解决方案很多天,但是没有一个示例可以让我知道如何使用SAME行中一列的值来计算该行中另一列的结果,以此类推。在表中,就像在下面的VBA代码中一样:

Do while Not rst.EOF
  rst.Edit
  rst![Field1] = rst![Field2] * ( 10 ^ ( (Len(MaximumAccountNumber) - Len(rst![Field2]) ) )
  rst.Update
  rst.MoveNext
Loop

请如何在SQL Server T-SQL中有效地执行这样的更新不使用游标,因为表中的行数可能会达到> 100,000?] >>

[我想通过创建一个SP来执行此操作,每次插入新帐户后都可以触发它(触发),以重新计算表中所有行的排序顺序,如下所示:

CREATE PROCEDURE [dbo].[SortingOrder] 
@MaxOrder Numeric(38,0) = 0, 
@Digits int = 0,
As
BEGIN
set @MaxOrder = (select MAX([AccNumber]) from Account) 
set @Digits = (select LEN(@MaxOrder)) 
Update dbo.Account 
Set [SortOrder] = (Select ([AccNumber] * (POWER(10 ,(@Digits - 
LEN([AccNumber])))  from [Account] )
END
GO

在此示例表[帐户]中为:

AccID       AccNumber     SortOrder
-----       ---------     --------- 
 023        23            2300
 054        243           2430
 153        5434          5434

但是,当插入新记录时,我希望将所有行的排序顺序更新为一个基于10幂(最大AccNumber的长度)的具有相同数字计数的数字,如下所示:

AccID       AccNumber     SortOrder
-----       ---------     --------- 
 023        23            230000000
 054        243           243553000
 153        5434          543400000
 233        432345625     432345625

[最近,我已将数据库从MS Access更改为SQL Server Express,对于单用户来说,Access是一个很棒的小型数据库,它具有非常简单的VBA功能,而我在SQL Server中却错过了它!...

sql-server tsql sql-server-2008-r2
1个回答
0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.