我有一个表,其中的结果使用“ ORDER”列进行排序,例如:
Doc_Id Doc_Value Doc_Order 1 aaa 1 12 xxx 5 2 bbb 12 3 ccc 24
我的问题是最初尽可能高效且可重用地设置此订单列。
我最初的想法是设置一个标量函数,当向表中添加新条目时,它可以用作默认值:
ALTER FUNCTION [dbo].[Documents_Initial_Order] ( ) RETURNS int AS BEGIN RETURN (SELECT ISNULL(MAX(DOC_ORDER),0) + 1 FROM dbo.Documents)
当用户想要置换2个文档时,我可以轻松地切换2个命令。
它工作得很好,但是我现在有第二张表,我需要以相同的方式进行设置,而且我敢肯定,有一种更好的方法可以做到这一点。任何的想法?
听起来好像您想要一个Identity列,一旦它获得初始值,就可以覆盖它。一种解决方案是拥有两列,一次称为“ InitialOrder”,即一个自动递增的身份列,然后是第二个名为doc_order的列,该列最初设置为与InitialOrder字段相同的值(甚至可能是插入触发器或存储过程(如果您这样做的话),但是可以让用户编辑该列。
每条记录确实需要额外的几个字节,但是可以解决您的问题,并且如果它根本没有任何价值,那么您将同时拥有初始文档顺序和用户重置顺序。
另外,我不确定您的doc_order是否需要唯一,但如果不是,则可以按doc_order和InitialOrder对返回值进行排序,以确保返回顺序一致。