我正在创建一个包含两列的表,我想自动增加.一列是主键,因此我在其上使用IDENTITY关键字.另一列将用于跟踪表中用户定义的项目"排序顺序".每当用户移动项目时,其"排序顺序"将交换值与另一个元素的值.但是,当项目插入表格时,应始终自动为插入的项目分配高于表格中任何其他值的排序顺序值.这是表创建脚本的简化版本:
CREATE TABLE [AnswerRow] (
[AnswerRowId] [int] IDENTITY(1,1) NOT NULL,
[SortOrder] [int] NOT NULL,
[IsDeleted] [bit] NOT NULL CONSTRAINT [DF_AnswerRow_IsDeleted] DEFAULT 0,
CONSTRAINT [PK_AnswerRow] PRIMARY KEY CLUSTERED ([AnswerRowId] asc)
)
Run Code Online (Sandbox Code Playgroud)
使SortOrder列自动递增的最佳方法是什么AnswerRowId(但仍然能够在之后修改排序顺序值)?
Jef*_*ata 10
我不确定这是否是@Stephen Wrighton的想法,但我认为你可以使用插入触发器来利用为AnswerRowId生成的IDENTITY值:
CREATE TRIGGER [dbo].[AnswerRowInsertTrigger]
ON [dbo].[AnswerRow]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE a SET a.SortOrder = a.AnswerRowId
FROM AnswerRow a JOIN inserted i ON a.AnswerRowId = i.AnswerRowId
END
Run Code Online (Sandbox Code Playgroud)
我想到了两种方式,第一种是触发器,这不是我个人所做的.
第二个,就是让我的SQL在这些方面做点什么:
INSERT INTO AnswerRow(SortOrder, IsDeleted, Answer)
SELECT MAX(SortOrder) + 1, 0, 'My New Answer'
FROM AnswerRow
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35084 次 |
| 最近记录: |