YD_Event.Admin/Database/Migrations/20260807_AddCheckinNo.sql

32 lines
1.9 KiB
MySQL
Raw Normal View History

/* 检录员一检、二检、三检任务分配。SQL Server,可重复执行。 */
SET NOCOUNT ON;
IF OBJECT_ID(N'dbo.CheckinTask', N'U') IS NULL
THROW 50001, N'缺少 dbo.CheckinTask,请先执行前置迁移', 1;
IF COL_LENGTH(N'dbo.CheckinTask', N'CheckinNo') IS NULL
ALTER TABLE dbo.CheckinTask ADD CheckinNo INT NOT NULL
CONSTRAINT DF_CheckinTask_CheckinNo DEFAULT (1);
GO
IF EXISTS(SELECT EventId FROM dbo.CheckinTask WHERE DeleteMark=0 AND TaskStatus=1 GROUP BY EventId HAVING COUNT(*)>3)
THROW 50002, N'存在赛事拥有超过三个有效检录员,请先解除多余检录员', 1;
;WITH RankedTask AS
(
SELECT Id, ROW_NUMBER() OVER(PARTITION BY EventId ORDER BY CreatedTime,Id) AS NewCheckinNo
FROM dbo.CheckinTask WHERE DeleteMark=0 AND TaskStatus=1
)
UPDATE task SET CheckinNo=ranked.NewCheckinNo
FROM dbo.CheckinTask task INNER JOIN RankedTask ranked ON ranked.Id=task.Id;
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.CheckinTask') AND name=N'UX_CheckinTask_Event_CheckinNo_Active')
CREATE UNIQUE INDEX UX_CheckinTask_Event_CheckinNo_Active
ON dbo.CheckinTask(EventId,CheckinNo) WHERE DeleteMark=0 AND TaskStatus=1;
GO
DECLARE @Description NVARCHAR(4000)=N'该检录员负责的检次:1-一检,2-二检,3-三检';
IF EXISTS(SELECT 1 FROM sys.extended_properties WHERE class=1 AND major_id=OBJECT_ID(N'dbo.CheckinTask') AND minor_id=COLUMNPROPERTY(OBJECT_ID(N'dbo.CheckinTask'),N'CheckinNo','ColumnId') AND name=N'MS_Description')
EXEC sys.sp_updateextendedproperty @name=N'MS_Description',@value=@Description,@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'CheckinTask',@level2type=N'COLUMN',@level2name=N'CheckinNo';
ELSE
EXEC sys.sp_addextendedproperty @name=N'MS_Description',@value=@Description,@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'CheckinTask',@level2type=N'COLUMN',@level2name=N'CheckinNo';