表结构如:
TacticID | uniqueidentifier |
ParentTacticID | uniqueidentifier |
EnterpriseUID | uniqueidentifier |
Name | nvarchar(256) |
SortOrder | int |
其中有父子关系和以SortOrder进行排序,以下的存储过程用于控制同级下的排序更新。
http://www.ruiya.com
附加另一个例子:
1.数据表设计如下:
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
CREATE
TABLE
[
dbo
]
.
[
RedirectService_Category
]
(
[
CategoryID
]
[
int
]
IDENTITY
(
1
,
1
)
NOT
NULL
,
[
ParentID
]
[
int
]
NOT
NULL
,
[
Name
]
[
nvarchar
]
(
256
) COLLATE Chinese_PRC_CI_AS
NOT
NULL
,
[
Description
]
[
nvarchar
]
(
2000
) COLLATE Chinese_PRC_CI_AS
NULL
,
[
IsEnabled
]
[
bit
]
NOT
NULL
CONSTRAINT
[
DF_RedirectService_Category_IsEnabled
]
DEFAULT
((
1
)),
[
SortOrder
]
[
int
]
NOT
NULL
CONSTRAINT
[
DF_RedirectService_Category_SortOrder
]
DEFAULT
((
1
)),
[
CreateDate
]
[
datetime
]
NOT
NULL
CONSTRAINT
[
DF_RedirectService_Category_CreateDate
]
DEFAULT
(
getdate
()),
[
LastUpdatedDate
]
[
datetime
]
NOT
NULL
CONSTRAINT
[
DF_RedirectService_Category_LastUpdatedDate
]
DEFAULT
(
getdate
()),
CONSTRAINT
[
PK_RedirectService_Category
]
PRIMARY
KEY
CLUSTERED
(
[
CategoryID
]
ASC
)
WITH
(PAD_INDEX
=
OFF
, IGNORE_DUP_KEY
=
OFF
)
ON
[
PRIMARY
]
)
ON
[
PRIMARY
]
2.存储过程:
2007-05-16 附加另处一个例子
USE
[
PermissionService
]
GO
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**/
/****** 对象: Table [dbo].[ps_Targets] 脚本日期: 05/16/2007 14:04:44 ******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
CREATE
TABLE
[
dbo
]
.
[
ps_Targets
]
(
[
ApplicationId
]
[
uniqueidentifier
]
NOT
NULL
,
[
TargetId
]
[
uniqueidentifier
]
NOT
NULL
CONSTRAINT
[
DF_ps_Targets_TargetId
]
DEFAULT
(
newid
()),
[
ParentId
]
[
uniqueidentifier
]
NOT
NULL
,
[
Name
]
[
nvarchar
]
(
256
) COLLATE Chinese_PRC_CI_AS
NOT
NULL
,
[
Url
]
[
nvarchar
]
(
500
) COLLATE Chinese_PRC_CI_AS
NULL
,
[
Description
]
[
nvarchar
]
(
2000
) COLLATE Chinese_PRC_CI_AS
NULL
,
[
SortOrder
]
[
int
]
NOT
NULL
,
[
CreateDate
]
[
datetime
]
NOT
NULL
CONSTRAINT
[
DF_Targets_CreateDate
]
DEFAULT
(
getdate
()),
[
LastUpdatedDate
]
[
datetime
]
NOT
NULL
CONSTRAINT
[
DF_Targets_LastUpdatedDate
]
DEFAULT
(
getdate
()),
CONSTRAINT
[
PK_ps_Targets
]
PRIMARY
KEY
NONCLUSTERED
(
[
TargetId
]
ASC
)
WITH
(IGNORE_DUP_KEY
=
OFF
)
ON
[
PRIMARY
]
)
ON
[
PRIMARY
]
USE
[
PermissionService
]
GO
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**/
/****** 对象: StoredProcedure [dbo].[ps_Targets_UpdateSortOrder] 脚本日期: 05/16/2007 14:05:37 ******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--
=============================================
--
Author: BillChen
--
Create date: 2007-05-15
--
Description: ps_Targets_UpdateSortOrder
--
=============================================
CREATE
PROCEDURE
[
dbo
]
.
[
ps_Targets_UpdateSortOrder
]
(
@TargetId
uniqueidentifier
,
--
对其操作的目标Id
@MoveUp
bit
--
是否向上移动
)
AS
SET
Transaction
Isolation
Level
Read
UNCOMMITTED
--
设置事务
BEGIN
SET
NOCOUNT
ON
;
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--
定义变量
DECLARE
@CurrentSortOrder
int
--
当前SortOrder值
DECLARE
@ParentId
uniqueidentifier
--
当前父分类ID
DECLARE
@ReplaceSortOrder
int
--
要替换的SortOrder值
DECLARE
@ReplaceTargetId
uniqueidentifier
--
要替换的TargetId
DECLARE
@ApplicationId
uniqueidentifier
--
当前节点所属的ApplicationId
--
为变量赋值
SELECT
@CurrentSortOrder
=
[
SortOrder
]
,
@ParentId
=
[
ParentId
]
,
@ApplicationId
=
[
ApplicationId
]
FROM
[
ps_Targets
]
WHERE
[
TargetId
]
=
@TargetId
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--
上移还是下移
IF
(
@MoveUp
=
1
)
BEGIN
--
上移操作
--
获取要替换的SortOrder和要替换的TargetId '<' 'DESC'
SELECT
@ReplaceSortOrder
=
COALESCE
(t.
[
SortOrder
]
,
-
1
),
@ReplaceTargetId
=
COALESCE
(t.
[
TargetId
]
,
'
00000000-0000-0000-0000-000000000000
'
)
FROM
[
ps_Targets
]
t
INNER
JOIN
(
SELECT
TOP
1
*
FROM
[
ps_Targets
]
WHERE
[
ApplicationId
]
=
@ApplicationId
AND
[
ParentId
]
=
@ParentId
AND
[
SortOrder
]
<
@CurrentSortOrder
ORDER
BY
[
SortOrder
]
DESC
)
AS
pt
ON
pt.
[
TargetId
]
=
t.
[
TargetId
]
--
print @ReplaceSortOrder;
--
print @ReplaceTargetId;
--
print @TargetId;
--
替换操作
IF
(
@ReplaceSortOrder
!=
-
1
AND
@ReplaceTargetId
!=
@TargetId
)
BEGIN
--
更新要替换项的SortOrder为当前值
UPDATE
[
ps_Targets
]
SET
[
SortOrder
]
=
@CurrentSortOrder
WHERE
[
TargetId
]
=
@ReplaceTargetId
--
更新当前项的SortOrder为要替换项的SortOrder值
UPDATE
[
ps_Targets
]
SET
[
SortOrder
]
=
@ReplaceSortOrder
WHERE
[
TargetId
]
=
@TargetId
END
END
ELSE
BEGIN
--
下移操作
--
获取要替换的SortOrder和要替换的TargetId '>' 'ASC'
SELECT
@ReplaceSortOrder
=
COALESCE
(t.
[
SortOrder
]
,
-
1
),
@ReplaceTargetId
=
COALESCE
(t.
[
TargetId
]
,
'
00000000-0000-0000-0000-000000000000
'
)
FROM
[
ps_Targets
]
t
INNER
JOIN
(
SELECT
TOP
1
*
FROM
[
ps_Targets
]
WHERE
[
ApplicationId
]
=
@ApplicationId
AND
[
ParentId
]
=
@ParentId
AND
[
SortOrder
]
>
@CurrentSortOrder
ORDER
BY
[
SortOrder
]
ASC
)
AS
pt
ON
pt.
[
TargetId
]
=
t.
[
TargetId
]
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--
print @ReplaceSortOrder;
--
print @ReplaceTargetId;
--
print @TargetId;
--
替换操作
IF
(
@ReplaceSortOrder
!=
-
1
AND
@ReplaceTargetId
!=
@TargetId
)
BEGIN
--
更新要替换项的SortOrder为当前值
UPDATE
[
ps_Targets
]
SET
[
SortOrder
]
=
@CurrentSortOrder
WHERE
[
TargetId
]
=
@ReplaceTargetId
--
更新当前项的SortOrder为要替换项的SortOrder值
UPDATE
[
ps_Targets
]
SET
[
SortOrder
]
=
@ReplaceSortOrder
WHERE
[
TargetId
]
=
@TargetId
END
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
END
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--
更新修改时间
UPDATE
[
ps_Targets
]
SET
[
LastUpdatedDate
]
=
getdate
()
WHERE
[
TargetId
]
=
@TargetId
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
END
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)