138 lines
6.4 KiB
MySQL
138 lines
6.4 KiB
MySQL
|
|
/*
|
|||
|
|
将检录任务、检录记录绑定到赛事秩序册场次。
|
|||
|
|
适用:SQL Server,可重复执行。
|
|||
|
|
依赖:20260804_AddMiniProgramCompetitionRoles.sql
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
|
|||
|
|
IF OBJECT_ID(N'dbo.CheckinTask', N'U') IS NULL
|
|||
|
|
THROW 50001, N'缺少 dbo.CheckinTask,请先执行 20260804_AddMiniProgramCompetitionRoles.sql', 1;
|
|||
|
|
|
|||
|
|
IF OBJECT_ID(N'dbo.CheckinRecord', N'U') IS NULL
|
|||
|
|
THROW 50002, N'缺少 dbo.CheckinRecord,请先执行 20260804_AddMiniProgramCompetitionRoles.sql', 1;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinTask', N'CurrentSessionKey') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinTask ADD CurrentSessionKey NVARCHAR(64) NULL;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinTask', N'CurrentSessionOrder') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinTask ADD CurrentSessionOrder INT NOT NULL
|
|||
|
|
CONSTRAINT DF_CheckinTask_CurrentSessionOrder DEFAULT (0);
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinTask', N'CurrentSessionName') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinTask ADD CurrentSessionName NVARCHAR(256) NULL;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinTask', N'CurrentEventProjectId') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinTask ADD CurrentEventProjectId BIGINT NULL;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinTask', N'CurrentSessionVenue') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinTask ADD CurrentSessionVenue NVARCHAR(128) NULL;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinRecord', N'SessionKey') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinRecord ADD SessionKey NVARCHAR(64) NULL;
|
|||
|
|
|
|||
|
|
IF COL_LENGTH(N'dbo.CheckinRecord', N'SessionOrder') IS NULL
|
|||
|
|
ALTER TABLE dbo.CheckinRecord ADD SessionOrder INT NOT NULL
|
|||
|
|
CONSTRAINT DF_CheckinRecord_SessionOrder DEFAULT (0);
|
|||
|
|
|
|||
|
|
GO
|
|||
|
|
|
|||
|
|
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.CheckinTask') AND name = N'IX_CheckinTask_Event_Session')
|
|||
|
|
CREATE INDEX IX_CheckinTask_Event_Session
|
|||
|
|
ON dbo.CheckinTask (EventId, CurrentSessionOrder, CurrentEventProjectId);
|
|||
|
|
|
|||
|
|
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.CheckinRecord') AND name = N'UX_CheckinRecord_Task_Round_Person_Active')
|
|||
|
|
DROP INDEX UX_CheckinRecord_Task_Round_Person_Active ON dbo.CheckinRecord;
|
|||
|
|
|
|||
|
|
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.CheckinRecord') AND name = N'UX_CheckinRecord_Task_Session_Person_Active')
|
|||
|
|
CREATE UNIQUE INDEX UX_CheckinRecord_Task_Session_Person_Active
|
|||
|
|
ON dbo.CheckinRecord (TaskId, SessionKey, RegistrationPersonId)
|
|||
|
|
WHERE DeleteMark = 0 AND SessionKey IS NOT NULL;
|
|||
|
|
|
|||
|
|
DECLARE @Comments TABLE
|
|||
|
|
(
|
|||
|
|
TableName SYSNAME NOT NULL,
|
|||
|
|
ColumnName SYSNAME NOT NULL,
|
|||
|
|
[Description] NVARCHAR(4000) NOT NULL
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
INSERT INTO @Comments (TableName, ColumnName, [Description])
|
|||
|
|
VALUES
|
|||
|
|
(N'CheckinTask', N'TotalRounds', N'兼容字段:当前赛事秩序册场次总数'),
|
|||
|
|
(N'CheckinTask', N'CurrentRound', N'兼容字段:当前场次在整本赛事秩序册中的全局顺序'),
|
|||
|
|
(N'CheckinTask', N'RoundName', N'兼容字段:当前秩序册场次显示名称'),
|
|||
|
|
(N'CheckinTask', N'CurrentSessionKey', N'当前秩序册场次稳定标识,格式为 EP{EventProjectId}-S{项目内场次序号}'),
|
|||
|
|
(N'CheckinTask', N'CurrentSessionOrder', N'当前场次在整本赛事秩序册中的全局顺序,从1开始'),
|
|||
|
|
(N'CheckinTask', N'CurrentSessionName', N'当前秩序册场次显示名称,包含全局场次、项目和项目内场次'),
|
|||
|
|
(N'CheckinTask', N'CurrentEventProjectId', N'当前场次所属赛事项目ID,关联 EventProject.Id'),
|
|||
|
|
(N'CheckinTask', N'CurrentSessionVenue', N'当前秩序册场次包含的比赛场地名称或编号'),
|
|||
|
|
(N'CheckinTask', N'CurrentGroupId', N'当前秩序册场次仅含单一组别时的 EventProjectGroup.Id;跨组别场次为空'),
|
|||
|
|
(N'CheckinTask', N'CurrentGroupName', N'当前秩序册场次包含的组别名称,多个组别使用顿号连接'),
|
|||
|
|
(N'CheckinTask', N'GroupOrder', N'兼容字段:当前场次在所属项目内的场次序号'),
|
|||
|
|
(N'CheckinTask', N'TotalGroups', N'兼容字段:当前赛事项目在秩序册中的场次总数'),
|
|||
|
|
(N'CheckinTask', N'NextGroupName', N'兼容字段:秩序册中的下一个场次名称'),
|
|||
|
|
(N'CheckinRecord', N'Round', N'兼容字段:检录发生时的秩序册全局场次顺序'),
|
|||
|
|
(N'CheckinRecord', N'GroupId', N'该人员所属赛事项目组别ID,关联 EventProjectGroup.Id'),
|
|||
|
|
(N'CheckinRecord', N'SessionKey', N'检录发生时的秩序册场次稳定标识,与 CheckinTask.CurrentSessionKey 对应'),
|
|||
|
|
(N'CheckinRecord', N'SessionOrder', N'检录发生时该场次在赛事秩序册中的全局顺序');
|
|||
|
|
|
|||
|
|
DECLARE
|
|||
|
|
@TableName SYSNAME,
|
|||
|
|
@ColumnName SYSNAME,
|
|||
|
|
@Description NVARCHAR(4000),
|
|||
|
|
@ObjectId INT,
|
|||
|
|
@ColumnId INT;
|
|||
|
|
|
|||
|
|
DECLARE CommentCursor CURSOR LOCAL FAST_FORWARD FOR
|
|||
|
|
SELECT TableName, ColumnName, [Description] FROM @Comments;
|
|||
|
|
|
|||
|
|
OPEN CommentCursor;
|
|||
|
|
FETCH NEXT FROM CommentCursor INTO @TableName, @ColumnName, @Description;
|
|||
|
|
|
|||
|
|
WHILE @@FETCH_STATUS = 0
|
|||
|
|
BEGIN
|
|||
|
|
SET @ObjectId = OBJECT_ID(QUOTENAME(N'dbo') + N'.' + QUOTENAME(@TableName), N'U');
|
|||
|
|
SET @ColumnId = COLUMNPROPERTY(@ObjectId, @ColumnName, 'ColumnId');
|
|||
|
|
|
|||
|
|
IF @ObjectId > 0 AND @ColumnId > 0
|
|||
|
|
BEGIN
|
|||
|
|
IF EXISTS
|
|||
|
|
(
|
|||
|
|
SELECT 1 FROM sys.extended_properties
|
|||
|
|
WHERE class = 1 AND major_id = @ObjectId
|
|||
|
|
AND minor_id = @ColumnId AND name = N'MS_Description'
|
|||
|
|
)
|
|||
|
|
BEGIN
|
|||
|
|
EXEC sys.sp_updateextendedproperty
|
|||
|
|
@name = N'MS_Description', @value = @Description,
|
|||
|
|
@level0type = N'SCHEMA', @level0name = N'dbo',
|
|||
|
|
@level1type = N'TABLE', @level1name = @TableName,
|
|||
|
|
@level2type = N'COLUMN', @level2name = @ColumnName;
|
|||
|
|
END
|
|||
|
|
ELSE
|
|||
|
|
BEGIN
|
|||
|
|
EXEC sys.sp_addextendedproperty
|
|||
|
|
@name = N'MS_Description', @value = @Description,
|
|||
|
|
@level0type = N'SCHEMA', @level0name = N'dbo',
|
|||
|
|
@level1type = N'TABLE', @level1name = @TableName,
|
|||
|
|
@level2type = N'COLUMN', @level2name = @ColumnName;
|
|||
|
|
END;
|
|||
|
|
END;
|
|||
|
|
|
|||
|
|
FETCH NEXT FROM CommentCursor INTO @TableName, @ColumnName, @Description;
|
|||
|
|
END;
|
|||
|
|
|
|||
|
|
CLOSE CommentCursor;
|
|||
|
|
DEALLOCATE CommentCursor;
|
|||
|
|
|
|||
|
|
SELECT
|
|||
|
|
t.name AS TableName,
|
|||
|
|
c.name AS ColumnName,
|
|||
|
|
CAST(ep.value AS NVARCHAR(4000)) AS [Description]
|
|||
|
|
FROM sys.extended_properties ep
|
|||
|
|
INNER JOIN sys.tables t ON ep.class = 1 AND ep.major_id = t.object_id
|
|||
|
|
INNER JOIN sys.columns c ON c.object_id = t.object_id AND c.column_id = ep.minor_id
|
|||
|
|
WHERE ep.name = N'MS_Description'
|
|||
|
|
AND t.name IN (N'CheckinTask', N'CheckinRecord')
|
|||
|
|
ORDER BY t.name, c.column_id;
|