[最近,我已将数据库从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中却错过了它!...
尝试一下: