feat: 同步全部系统改动与文档

This commit is contained in:
2026-07-28 10:29:56 +08:00
parent 62f7632fc6
commit 1fa1ece06d
487 changed files with 267645 additions and 144 deletions

View File

@@ -0,0 +1,193 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725', N'P') IS NOT NULL
THROW 51400, N'预算功能部署前备份过程已存在,停止重复部署。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务预算', N'U') IS NULL
BEGIN
CREATE TABLE dbo.[_装配任务预算]
(
[] int NOT NULL,
[] decimal(18, 2) NOT NULL
CONSTRAINT [DF_装配任务预算_工时] DEFAULT (0),
[] nvarchar(100) NULL,
[] datetime2(0) NOT NULL
CONSTRAINT [DF_装配任务预算_编辑时间] DEFAULT (SYSDATETIME()),
CONSTRAINT [PK_计划排产_装配任务预算] PRIMARY KEY CLUSTERED ([]),
CONSTRAINT [CK_装配任务预算_工时] CHECK ([] >= 0)
);
END;
IF OBJECT_ID(N'dbo.计划排产_装配合同预算', N'U') IS NULL
BEGIN
CREATE TABLE dbo.[_装配合同预算]
(
[] nvarchar(50) NOT NULL,
[] decimal(18, 2) NOT NULL
CONSTRAINT [DF_装配合同预算_工时] DEFAULT (0),
[] nvarchar(100) NULL,
[] datetime2(0) NOT NULL
CONSTRAINT [DF_装配合同预算_编辑时间] DEFAULT (SYSDATETIME()),
CONSTRAINT [PK_计划排产_装配合同预算] PRIMARY KEY CLUSTERED ([]),
CONSTRAINT [CK_装配合同预算_工时] CHECK ([] >= 0)
);
END;
GO
CREATE OR ALTER PROCEDURE dbo.[_装配任务预算_保存]
@ nvarchar(10),
@ int = 0,
@ nvarchar(50) = N'',
@ decimal(18, 2),
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF @ IS NULL OR @ < 0
THROW 51401, N'预算工时必须大于或等于 0。', 1;
IF @ = N'任务'
BEGIN
IF @ <= 0
THROW 51402, N'任务预算缺少有效订单号。', 1;
BEGIN TRANSACTION;
UPDATE dbo.[_装配任务预算] WITH (UPDLOCK, SERIALIZABLE)
SET [] = @,
[] = NULLIF(@, N''),
[] = SYSDATETIME()
WHERE [] = @;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.[_装配任务预算]
([], [], [])
VALUES
(@, @, NULLIF(@, N''));
END;
COMMIT TRANSACTION;
END
ELSE IF @ = N'合同'
BEGIN
SET @ = LTRIM(RTRIM(@));
IF @ = N''
THROW 51403, N'合同预算缺少合同号。', 1;
BEGIN TRANSACTION;
UPDATE dbo.[_装配合同预算] WITH (UPDLOCK, SERIALIZABLE)
SET [] = @,
[] = NULLIF(@, N''),
[] = SYSDATETIME()
WHERE [] = @;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.[_装配合同预算]
([], [], [])
VALUES
(@, @, NULLIF(@, N''));
END;
COMMIT TRANSACTION;
END
ELSE
THROW 51404, N'预算类型只允许“任务”或“合同”。', 1;
SELECT CAST(1 AS int) AS [result];
END;
GO
DECLARE @Definition nvarchar(max) =
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心'));
DECLARE @BackupDefinition nvarchar(max);
DECLARE @ProcedurePosition int;
DECLARE @FieldMarker nvarchar(200) =
N'ISNULL(ht.[合同质检工时], 0) AS [合同质检工时],';
DECLARE @JoinMarker nvarchar(200) =
N'LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]';
IF @Definition IS NULL
THROW 51405, N'未找到装配任务核心查询过程。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @FieldMarker, N''))) / LEN(@FieldMarker) <> 2
THROW 51406, N'核心查询的工时字段结构与预期不一致,停止部署。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @JoinMarker, N''))) / LEN(@JoinMarker) <> 2
THROW 51407, N'核心查询的合同工时连接结构与预期不一致,停止部署。', 1;
SET @BackupDefinition = REPLACE(
@Definition,
N'[dbo].[计划排产_装配任务查询_核心]',
N'[dbo].[计划排产_装配任务查询_核心_预算前_20260725]'
);
EXEC sys.sp_executesql @BackupDefinition;
SET @Definition = REPLACE(
@Definition,
@FieldMarker,
@FieldMarker + N'
ISNULL(rw.[任务预算装配工时], 0) AS [任务预算装配工时],
CAST(CASE
WHEN ISNULL(rw.[任务预算装配工时], 0) > 0
THEN ISNULL(zp.[装配工时], 0) / 3600.0 / rw.[任务预算装配工时] * 100.0
ELSE 0
END AS decimal(18, 2)) AS [任务预算装配进度],
ISNULL(cw.[合同预算测试工时], 0) AS [合同预算测试工时],
CAST(CASE
WHEN ISNULL(cw.[合同预算测试工时], 0) > 0
THEN ISNULL(ht.[合同质检工时], 0) / 3600.0 / cw.[合同预算测试工时] * 100.0
ELSE 0
END AS decimal(18, 2)) AS [合同预算测试进度],'
);
SET @Definition = REPLACE(
@Definition,
@JoinMarker,
@JoinMarker + N'
LEFT JOIN dbo.[计划排产_装配任务预算] AS rw ON v.[订单编号] = rw.[订单号]
LEFT JOIN dbo.[计划排产_装配合同预算] AS cw ON v.[合同号] = cw.[合同号]'
);
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
IF @ProcedurePosition = 0
THROW 51408, N'未识别核心查询过程定义头。', 1;
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
EXEC sys.sp_executesql @Definition;
COMMIT TRANSACTION;
GO
IF OBJECT_ID(N'dbo.计划排产_装配任务预算', N'U') IS NULL
THROW 51409, N'任务预算表部署校验失败。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配合同预算', N'U') IS NULL
THROW 51410, N'合同预算表部署校验失败。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务预算_保存', N'P') IS NULL
THROW 51411, N'预算保存过程部署校验失败。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725', N'P') IS NULL
THROW 51412, N'核心查询备份过程部署校验失败。', 1;
SELECT [name], [type_desc], [create_date], [modify_date]
FROM sys.objects
WHERE [name] IN
(
N'计划排产_装配任务预算',
N'计划排产_装配合同预算',
N'计划排产_装配任务预算_保存',
N'计划排产_装配任务查询_核心',
N'计划排产_装配任务查询_核心_预算前_20260725'
)
ORDER BY [name];
GO

View File

@@ -0,0 +1,228 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
GO
BEGIN TRY
BEGIN TRANSACTION;
IF COL_LENGTH(N'dbo.计划排产_装配任务预算', N'任务预算质检工时') IS NULL
BEGIN
ALTER TABLE dbo.[_装配任务预算]
ADD [] decimal(18, 2) NOT NULL
CONSTRAINT [DF_装配任务预算_质检工时] DEFAULT (0) WITH VALUES,
CONSTRAINT [CK_装配任务预算_质检工时] CHECK ([] >= 0);
END;
IF COL_LENGTH(N'dbo.计划排产_装配合同预算', N'合同预算装配工时') IS NULL
BEGIN
ALTER TABLE dbo.[_装配合同预算]
ADD [] decimal(18, 2) NOT NULL
CONSTRAINT [DF_装配合同预算_装配工时] DEFAULT (0) WITH VALUES,
CONSTRAINT [CK_装配合同预算_装配工时] CHECK ([] >= 0);
END;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO
DECLARE @SaveProcedureDefinition nvarchar(max) =
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务预算_保存'));
DECLARE @SaveProcedurePosition int;
IF @SaveProcedureDefinition IS NULL
THROW 51420, N'未找到装配任务预算保存过程。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务预算_保存_预算扩展前_20260727', N'P') IS NULL
BEGIN
SET @SaveProcedureDefinition = REPLACE(
@SaveProcedureDefinition,
N'[计划排产_装配任务预算_保存]',
N'[计划排产_装配任务预算_保存_预算扩展前_20260727]'
);
SET @SaveProcedurePosition = CHARINDEX(N'PROCEDURE', @SaveProcedureDefinition);
IF @SaveProcedurePosition = 0
THROW 51434, N'未识别预算保存过程定义头。', 1;
SET @SaveProcedureDefinition = N'CREATE ' + SUBSTRING(
@SaveProcedureDefinition,
@SaveProcedurePosition,
LEN(@SaveProcedureDefinition)
);
EXEC sys.sp_executesql @SaveProcedureDefinition;
END;
GO
CREATE OR ALTER PROCEDURE dbo.[_装配任务预算_保存]
@ nvarchar(10),
@ int = 0,
@ nvarchar(50) = N'',
@ decimal(18, 2),
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF @ IS NULL OR @ < 0
THROW 51421, N'预算工时必须大于或等于 0。', 1;
IF @ IN (N'任务', N'任务装配', N'任务质检')
BEGIN
IF @ <= 0
THROW 51422, N'任务预算缺少有效订单号。', 1;
BEGIN TRANSACTION;
UPDATE dbo.[_装配任务预算] WITH (UPDLOCK, SERIALIZABLE)
SET [] = CASE WHEN @ IN (N'任务', N'任务装配') THEN @ ELSE [] END,
[] = CASE WHEN @ = N'任务质检' THEN @ ELSE [] END,
[] = NULLIF(@, N''),
[] = SYSDATETIME()
WHERE [] = @;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.[_装配任务预算]
([], [], [], [])
VALUES
(@,
CASE WHEN @ IN (N'任务', N'任务装配') THEN @ ELSE 0 END,
CASE WHEN @ = N'任务质检' THEN @ ELSE 0 END,
NULLIF(@, N''));
END;
COMMIT TRANSACTION;
END
ELSE IF @ IN (N'合同', N'合同测试', N'合同装配')
BEGIN
SET @ = LTRIM(RTRIM(@));
IF @ = N''
THROW 51423, N'合同预算缺少合同号。', 1;
BEGIN TRANSACTION;
UPDATE dbo.[_装配合同预算] WITH (UPDLOCK, SERIALIZABLE)
SET [] = CASE WHEN @ IN (N'合同', N'合同测试') THEN @ ELSE [] END,
[] = CASE WHEN @ = N'合同装配' THEN @ ELSE [] END,
[] = NULLIF(@, N''),
[] = SYSDATETIME()
WHERE [] = @;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.[_装配合同预算]
([], [], [], [])
VALUES
(@,
CASE WHEN @ IN (N'合同', N'合同测试') THEN @ ELSE 0 END,
CASE WHEN @ = N'合同装配' THEN @ ELSE 0 END,
NULLIF(@, N''));
END;
COMMIT TRANSACTION;
END
ELSE
THROW 51424, N'预算类型只允许任务装配、任务质检、合同装配或合同测试。', 1;
SELECT CAST(1 AS int) AS [result];
END;
GO
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @Definition nvarchar(max) =
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心'));
DECLARE @BackupDefinition nvarchar(max);
DECLARE @ProcedurePosition int;
DECLARE @TaskQualityMarker nvarchar(200) =
N'ISNULL(zp.[质检工时], 0) AS [任务质检工时],';
DECLARE @ContractAssemblyMarker nvarchar(200) =
N'ISNULL(ht.[合同装配工时], 0) AS [合同装配工时],';
IF @Definition IS NULL
THROW 51425, N'未找到装配任务核心查询过程。', 1;
IF CHARINDEX(N'[任务预算质检工时]', @Definition) = 0
BEGIN
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @TaskQualityMarker, N''))) / LEN(@TaskQualityMarker) <> 2
THROW 51426, N'核心查询的任务质检工时字段结构与预期不一致,停止部署。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @ContractAssemblyMarker, N''))) / LEN(@ContractAssemblyMarker) <> 2
THROW 51427, N'核心查询的合同装配工时字段结构与预期不一致,停止部署。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算扩展前_20260727', N'P') IS NULL
BEGIN
SET @BackupDefinition = REPLACE(
@Definition,
N'[dbo].[计划排产_装配任务查询_核心]',
N'[dbo].[计划排产_装配任务查询_核心_预算扩展前_20260727]'
);
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @BackupDefinition);
IF @ProcedurePosition = 0
THROW 51428, N'未识别核心查询过程定义头。', 1;
SET @BackupDefinition = N'CREATE ' + SUBSTRING(
@BackupDefinition,
@ProcedurePosition,
LEN(@BackupDefinition)
);
EXEC sys.sp_executesql @BackupDefinition;
END;
SET @Definition = REPLACE(
@Definition,
@TaskQualityMarker,
@TaskQualityMarker + N'
ISNULL(rw.[任务预算质检工时], 0) AS [任务预算质检工时],
CAST(CASE
WHEN ISNULL(rw.[任务预算质检工时], 0) > 0
THEN ISNULL(zp.[质检工时], 0) / 3600.0 / rw.[任务预算质检工时] * 100.0
ELSE 0
END AS decimal(18, 2)) AS [任务预算质检进度],'
);
SET @Definition = REPLACE(
@Definition,
@ContractAssemblyMarker,
@ContractAssemblyMarker + N'
ISNULL(cw.[合同预算装配工时], 0) AS [合同预算装配工时],
CAST(CASE
WHEN ISNULL(cw.[合同预算装配工时], 0) > 0
THEN ISNULL(ht.[合同装配工时], 0) / 3600.0 / cw.[合同预算装配工时] * 100.0
ELSE 0
END AS decimal(18, 2)) AS [合同预算装配进度],'
);
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
IF @ProcedurePosition = 0
THROW 51429, N'未识别核心查询过程定义头。', 1;
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
EXEC sys.sp_executesql @Definition;
END;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO
IF COL_LENGTH(N'dbo.计划排产_装配任务预算', N'任务预算质检工时') IS NULL
THROW 51430, N'任务预算质检工时字段部署校验失败。', 1;
IF COL_LENGTH(N'dbo.计划排产_装配合同预算', N'合同预算装配工时') IS NULL
THROW 51431, N'合同预算装配工时字段部署校验失败。', 1;
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')) NOT LIKE N'%任务预算质检进度%'
THROW 51432, N'任务预算质检进度字段部署校验失败。', 1;
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')) NOT LIKE N'%合同预算装配进度%'
THROW 51433, N'合同预算装配进度字段部署校验失败。', 1;
GO

View File

@@ -0,0 +1,103 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @ProcedureName sysname;
DECLARE @Definition nvarchar(max);
DECLARE @CreatePosition int;
DECLARE @AssemblySelect nvarchar(200) = N'SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时';
DECLARE @QualitySelect nvarchar(200) = N'SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时';
DECLARE @GroupBy nvarchar(100) = N'GROUP BY gs.合同号';
DECLARE ProcedureCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT [name]
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
OPEN ProcedureCursor;
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@ProcedureName)));
IF @Definition IS NULL
THROW 51000, N'未找到待修改的存储过程。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @AssemblySelect, N''))) / LEN(@AssemblySelect) <> 1
THROW 51001, N'合同装配工时汇总代码与预期不一致,已停止部署。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @QualitySelect, N''))) / LEN(@QualitySelect) <> 1
THROW 51002, N'合同质检工时汇总代码与预期不一致,已停止部署。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @GroupBy, N''))) / LEN(@GroupBy) <> 2
THROW 51003, N'合同工时分组代码与预期不一致,已停止部署。', 1;
SET @Definition = REPLACE(
@Definition,
@AssemblySelect,
N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时'
);
SET @Definition = REPLACE(
@Definition,
@QualitySelect,
N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时'
);
SET @Definition = REPLACE(@Definition, @GroupBy, N'GROUP BY gs.订单合同号');
SET @CreatePosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
IF @CreatePosition = 0
THROW 51004, N'存储过程定义中未找到 CREATE PROCEDURE。', 1;
SET @Definition = STUFF(
@Definition,
@CreatePosition,
LEN(N'CREATE PROCEDURE'),
N'ALTER PROCEDURE'
);
EXEC sys.sp_executesql @Definition;
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
END;
CLOSE ProcedureCursor;
DEALLOCATE ProcedureCursor;
IF EXISTS
(
SELECT 1
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
AND
(
OBJECT_DEFINITION([object_id]) NOT LIKE N'%SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时%'
OR OBJECT_DEFINITION([object_id]) NOT LIKE N'%SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时%'
OR OBJECT_DEFINITION([object_id]) LIKE N'%GROUP BY gs.合同号%'
)
)
THROW 51005, N'存储过程修改后校验失败。', 1;
COMMIT TRANSACTION;
SELECT [name], [modify_date]
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
END TRY
BEGIN CATCH
IF CURSOR_STATUS('local', 'ProcedureCursor') >= 0
CLOSE ProcedureCursor;
IF CURSOR_STATUS('local', 'ProcedureCursor') > -3
DEALLOCATE ProcedureCursor;
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,469 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
GO
DECLARE @Name sysname;
DECLARE @BackupName sysname;
DECLARE @Definition nvarchar(max);
DECLARE @HeaderPosition int;
DECLARE @HeaderLength int;
IF OBJECT_ID(N'dbo.计划排产_系统类任务查询_优化前_20260725', N'P') IS NOT NULL
THROW 51200, N'系统类优化前备份过程已存在,停止重复部署。', 1;
IF OBJECT_ID(N'dbo.计划排产_阀类任务查询_优化前_20260725', N'P') IS NOT NULL
THROW 51201, N'阀类优化前备份过程已存在,停止重复部署。', 1;
DECLARE BackupCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT [name], [name] + N'_优化前_20260725'
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
OPEN BackupCursor;
FETCH NEXT FROM BackupCursor INTO @Name, @BackupName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@Name)));
IF @Definition IS NULL
THROW 51202, N'未找到待优化过程定义。', 1;
SET @Definition = REPLACE(
@Definition,
N'[dbo].[' + @Name + N']',
N'[dbo].[' + @BackupName + N']'
);
SET @HeaderPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
SET @HeaderLength = LEN(N'ALTER PROCEDURE');
IF @HeaderPosition = 0
BEGIN
SET @HeaderPosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
SET @HeaderLength = LEN(N'CREATE PROCEDURE');
END;
IF @HeaderPosition = 0
THROW 51203, N'未识别过程定义头。', 1;
SET @Definition = STUFF(
@Definition,
@HeaderPosition,
@HeaderLength,
N'CREATE PROCEDURE'
);
EXEC sys.sp_executesql @Definition;
FETCH NEXT FROM BackupCursor INTO @Name, @BackupName;
END;
CLOSE BackupCursor;
DEALLOCATE BackupCursor;
GO
CREATE OR ALTER PROCEDURE [dbo].[_装配任务查询_核心]
@ nvarchar(10),
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@1 nvarchar(50) = N'',
@2 nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'不含'
AS
BEGIN
SET NOCOUNT ON;
-- 原过程只有“自制件”分支会生成查询,保持该行为不变。
IF @ <> N'自制件'
RETURN;
DECLARE @ datetime = CASE WHEN @1 = N'' THEN NULL ELSE CONVERT(datetime, @1) END;
DECLARE @ datetime = CASE WHEN @2 = N'' THEN NULL ELSE CONVERT(datetime, @2) END;
DECLARE @ datetime = CASE WHEN @ = N'' THEN NULL ELSE CONVERT(datetime, @) END;
DECLARE @ datetime = CASE WHEN @ = N'' THEN NULL ELSE CONVERT(datetime, @) END;
SELECT v.*
INTO #任务
FROM dbo.View_生产订单_MES AS v
WHERE v.[] = N'pit_Resource'
AND v.[] LIKE N'%装配%'
AND
(
(@ = N'系统' AND v.[] LIKE N'%系统%')
OR (@ = N'阀类' AND v.[] NOT LIKE N'%系统%')
)
AND ISNULL(v.[], 0) < 4
AND (@ = 0 OR v.[] = @)
AND (@ = N'' OR v.[] LIKE N'%' + @ + N'%')
AND (@ = N'' OR v.[] LIKE N'%' + @ + N'%')
AND (@ = N'' OR v.[] LIKE N'%' + @ + N'%')
AND
(
@ <> N'不含'
OR
(
v.[] NOT LIKE N'%软管总成%'
AND v.[] NOT LIKE N'%发货部件%'
)
)
AND (@ = N'' OR v.[] = @)
AND (@ IS NULL OR v.[] >= @)
AND (@ IS NULL OR v.[] <= @)
AND (@ IS NULL OR v.[] >= @)
AND (@ IS NULL OR v.[] <= @)
AND
(
@ = N'全部'
OR (@ = N'未完成' AND ISNULL(v.[], 0) = 0)
OR (@ = N'已完成' AND v.[] = 1)
)
AND v.[] <> N''
AND
(
@ = N'全部'
OR EXISTS
(
SELECT 1
FROM STRING_SPLIT(@, N',') AS ss
WHERE ss.[value] = v.[]
)
)
OPTION (RECOMPILE);
CREATE CLUSTERED INDEX [CX_任务_订单]
ON #任务 ([订单编号], [订单行号], [订单拆分内码]);
CREATE NONCLUSTERED INDEX [IX_任务_合同物料]
ON #任务 ([合同号], [物料编号]);
SELECT DISTINCT []
INTO #订单
FROM #任务;
CREATE UNIQUE CLUSTERED INDEX [CX_订单] ON #订单 ([订单编号]);
SELECT DISTINCT []
INTO #合同
FROM #任务
WHERE [] IS NOT NULL;
CREATE UNIQUE CLUSTERED INDEX [CX_合同] ON #合同 ([合同号]);
-- 原过程对同一复杂工时视图扫描四次;改为一次扫描后再按订单和合同汇总。
SELECT
TRY_CONVERT(int, gs.[]) AS [],
gs.[] AS [],
SUM(CASE WHEN ry.[] IN (N'装配', N'电气') THEN gs.[] ELSE 0 END) AS [],
SUM(CASE WHEN ry.[] = N'质检' THEN gs.[] ELSE 0 END) AS [],
MAX(CASE WHEN ry.[] IN (N'装配', N'电气') THEN gs.[] END) AS [],
MAX(CASE WHEN ry.[] = N'质检' THEN gs.[] END) AS []
INTO #工时粒度
FROM dbo.View_生产工时视图 AS gs
INNER JOIN dbo.[_人员信息] AS ry
ON gs.[] = ry.[Personnel_Name]
WHERE ry.[] IN (N'装配', N'电气', N'质检')
AND
(
EXISTS
(
SELECT 1
FROM #订单 AS od
WHERE od.[] = TRY_CONVERT(int, gs.[])
)
OR EXISTS
(
SELECT 1
FROM #合同 AS ht
WHERE ht.[] = gs.[]
)
)
GROUP BY TRY_CONVERT(int, gs.[]), gs.[]
OPTION (RECOMPILE);
SELECT
[],
SUM([]) AS [],
SUM([]) AS [],
MAX([]) AS [],
MAX([]) AS []
INTO #任务工时
FROM #工时粒度
WHERE [] IS NOT NULL
GROUP BY [];
CREATE UNIQUE CLUSTERED INDEX [CX_任务工时] ON #任务工时 ([订单号]);
SELECT
[],
SUM([]) AS [],
SUM([]) AS []
INTO #合同工时
FROM #工时粒度
WHERE [] IS NOT NULL
GROUP BY [];
CREATE UNIQUE CLUSTERED INDEX [CX_合同工时] ON #合同工时 ([合同号]);
SELECT
lc.[] AS [],
STRING_AGG(CONVERT(nvarchar(max), lc.[]), N',')
WITHIN GROUP (ORDER BY lc.[ID]) AS []
INTO #流程
FROM dbo.[] AS lc
INNER JOIN #订单 AS od
ON od.[] = lc.[]
GROUP BY lc.[];
SELECT DISTINCT
pt.[],
CASE WHEN ry.[] = N'质检' THEN N'质检' ELSE N'装配' END AS [],
t.[],
t.[]
INTO #进行中明细
FROM dbo.[YL_加工中心_操作记录表] AS t
INNER JOIN dbo.[MES_接口_生产计划_生产任务] AS pt
ON t.[TaskAID] = pt.[AID]
INNER JOIN #订单 AS od
ON od.[] = pt.[]
INNER JOIN dbo.[_人员信息] AS ry
ON t.[] = ry.[Personnel_Name]
WHERE t.[] = N'开始加工'
AND t.[] IS NULL
AND t.[] IS NOT NULL
AND ry.[] IN (N'装配', N'电气', N'质检');
SELECT
[],
[],
STRING_AGG(
CONVERT(nvarchar(max), [] + N': ' + CONVERT(varchar(19), [], 120)),
N','
) WITHIN GROUP (ORDER BY [] DESC) AS []
INTO #进行中聚合
FROM #进行中明细
GROUP BY [], [];
SELECT
[],
MAX(CASE WHEN [] = N'装配' THEN [] END) AS [],
MAX(CASE WHEN [] = N'质检' THEN [] END) AS []
INTO #进行中
FROM #进行中聚合
GROUP BY [];
SELECT DISTINCT q.[]
INTO #终检
FROM dbo.[YL_质量检验_质检记录] AS q
INNER JOIN #订单 AS od
ON od.[] = q.[]
WHERE q.[] = N'终检';
CREATE UNIQUE CLUSTERED INDEX [CX_终检] ON #终检 ([计划号]);
SELECT DISTINCT [], []
INTO #交货键
FROM #任务
WHERE [] IS NOT NULL
AND [] IS NOT NULL;
SELECT
k.[],
k.[],
MIN(s.[]) AS []
INTO #交货
FROM #交货键 AS k
LEFT JOIN [SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2] AS s
ON s.[] = k.[]
AND s.[] = k.[]
GROUP BY k.[], k.[];
CREATE UNIQUE CLUSTERED INDEX [CX_交货] ON #交货 ([合同号], [物料编号]);
IF @ = N'系统'
BEGIN
SELECT
v.[], ISNULL(v.[], 0) AS [], ISNULL(v.[], 0) AS [],
v.[TaskAID], v.[], v.[] AS [], v.[], v.[] AS [],
v.[] AS [], v.[] AS [],
TRIM('.' FROM TRIM('0' FROM CAST(v.[] AS varchar(30)))) AS [],
v.[] AS [], v.[], v.[], v.[], v.[],
v.[], v.[], v.[], v.[], v.[], v.[],
CASE WHEN v.[] = 1 THEN N'加急' ELSE N'' END AS [], v.[],
ISNULL(v.[], 0) AS [], v.[], v.[], v.[],
v.[], v.[],
TRIM('.' FROM TRIM('0' FROM CAST(v.[] AS varchar(30)))) AS [],
v.[], v.[], v.[], v.[], v.[], v.[],
v.[], v.[], v.[], v.[], v.[],
jh.[] AS [],
CASE WHEN zj.[] IS NOT NULL THEN N'' ELSE N'' END AS [],
ISNULL(g.[], 0) AS [], v.[],
ISNULL(v.[], DATEADD(DAY, 3, v.[])) AS [],
ISNULL(v.[], jh.[]) AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'发料齐套'
WHEN ISNULL(v.[], 0) = 2 THEN N'发料缺件'
WHEN ISNULL(v.[], 0) = 0 THEN N'未发料'
END AS [],
ISNULL(zp.[], 0) AS [],
ISNULL(zp.[], 0) AS [],
ISNULL(ht.[], 0) AS [],
ISNULL(ht.[], 0) AS [],
ISNULL(zp.[], N'') AS [],
ISNULL(zp.[], N'') AS [],
ISNULL(lc.[], N'') AS [],
ISNULL(jxz.[], N'') AS [],
ISNULL(jxz.[], N'') AS []
FROM #任务 AS v
LEFT JOIN #终检 AS zj ON v.[订单编号] = zj.[计划号]
LEFT JOIN dbo.[_零件生产工艺_工艺库] AS g
ON v.[] = g.[] AND v.[] = g.[]
LEFT JOIN #任务工时 AS zp ON v.[订单编号] = zp.[订单号]
LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]
LEFT JOIN #交货 AS jh ON v.[合同号] = jh.[合同号] AND v.[物料编号] = jh.[物料编号]
LEFT JOIN #流程 AS lc ON v.[订单编号] = lc.[订单编号]
LEFT JOIN #进行中 AS jxz ON v.[订单编号] = jxz.[订单编号]
ORDER BY
CASE WHEN v.[] IS NULL THEN 1 ELSE 0 END,
v.[], v.[];
END
ELSE
BEGIN
SELECT
v.[], ISNULL(v.[], 0) AS [], ISNULL(v.[], 0) AS [],
v.[TaskAID], v.[], v.[] AS [], v.[], v.[] AS [],
v.[] AS [], v.[] AS [],
TRIM('.' FROM TRIM('0' FROM CAST(v.[] AS varchar(30)))) AS [],
v.[] AS [], v.[], v.[], v.[], v.[],
v.[], v.[], v.[], v.[], v.[], v.[],
CASE WHEN v.[] = 1 THEN N'加急' ELSE N'' END AS [], v.[],
ISNULL(v.[], 0) AS [], v.[], v.[], v.[],
v.[], v.[],
TRIM('.' FROM TRIM('0' FROM CAST(v.[] AS varchar(30)))) AS [],
v.[], v.[], v.[], v.[], v.[], v.[],
v.[], v.[], v.[], v.[], v.[],
jh.[] AS [],
CASE WHEN zj.[] IS NOT NULL THEN N'' ELSE N'' END AS [],
ISNULL(g.[], 0) AS [],
ISNULL(v.[], DATEADD(DAY, 3, v.[])) AS [],
ISNULL(v.[], jh.[]) AS [],
ISNULL(zp.[], 0) AS [],
ISNULL(zp.[], 0) AS [],
ISNULL(ht.[], 0) AS [],
ISNULL(ht.[], 0) AS [],
ISNULL(zp.[], N'') AS [],
ISNULL(zp.[], N'') AS [],
ISNULL(lc.[], N'') AS [],
ISNULL(jxz.[], N'') AS [],
ISNULL(jxz.[], N'') AS []
FROM #任务 AS v
LEFT JOIN #终检 AS zj ON v.[订单编号] = zj.[计划号]
LEFT JOIN dbo.[_零件生产工艺_工艺库] AS g
ON v.[] = g.[] AND v.[] = g.[]
LEFT JOIN #任务工时 AS zp ON v.[订单编号] = zp.[订单号]
LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]
LEFT JOIN #交货 AS jh ON v.[合同号] = jh.[合同号] AND v.[物料编号] = jh.[物料编号]
LEFT JOIN #流程 AS lc ON v.[订单编号] = lc.[订单编号]
LEFT JOIN #进行中 AS jxz ON v.[订单编号] = jxz.[订单编号]
ORDER BY
CASE WHEN v.[] IS NULL THEN 1 ELSE 0 END,
v.[], v.[];
END;
END;
GO
ALTER PROCEDURE [dbo].[_系统类任务查询]
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@1 nvarchar(50) = N'',
@2 nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'不含'
AS
BEGIN
SET NOCOUNT ON;
EXEC dbo.[_装配任务查询_核心]
@ = N'系统',
@ = @,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @,
@1 = @1,
@2 = @2,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @;
END;
GO
ALTER PROCEDURE [dbo].[_阀类任务查询]
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@1 nvarchar(50) = N'',
@2 nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'不含'
AS
BEGIN
SET NOCOUNT ON;
EXEC dbo.[_装配任务查询_核心]
@ = N'阀类',
@ = @,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @,
@1 = @1,
@2 = @2,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @;
END;
GO
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心', N'P') IS NULL
THROW 51210, N'核心过程创建失败。', 1;
IF OBJECT_ID(N'dbo.计划排产_系统类任务查询_优化前_20260725', N'P') IS NULL
THROW 51211, N'系统类备份过程创建失败。', 1;
IF OBJECT_ID(N'dbo.计划排产_阀类任务查询_优化前_20260725', N'P') IS NULL
THROW 51212, N'阀类备份过程创建失败。', 1;
COMMIT TRANSACTION;
GO
SELECT [name], [modify_date]
FROM sys.procedures
WHERE [name] IN
(
N'计划排产_装配任务查询_核心',
N'计划排产_系统类任务查询',
N'计划排产_阀类任务查询',
N'计划排产_系统类任务查询_优化前_20260725',
N'计划排产_阀类任务查询_优化前_20260725'
)
ORDER BY [name];
GO

View File

@@ -0,0 +1,79 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.物料基础数据_零件图纸')
AND name = N'IX_零件图纸_num'
)
CREATE NONCLUSTERED INDEX [IX_零件图纸_num]
ON [dbo].[_零件图纸] ([num])
INCLUDE ([worker]);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.车间生产管理工艺_零件生产工艺_工艺库')
AND name = N'IX_工艺库_订单_顺序'
)
CREATE NONCLUSTERED INDEX [IX_工艺库_订单_顺序]
ON [dbo].[_零件生产工艺_工艺库] ([], [])
INCLUDE ([]);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.YL_质量检验_质检记录')
AND name = N'IX_质检记录_质检类型_计划号'
)
CREATE NONCLUSTERED INDEX [IX_质检记录_质检类型_计划号]
ON [dbo].[YL_质量检验_质检记录] ([], []);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.登录基础数据_人员信息')
AND name = N'IX_人员信息_姓名_班组'
)
CREATE NONCLUSTERED INDEX [IX_人员信息_姓名_班组]
ON [dbo].[_人员信息] ([Personnel_Name])
INCLUDE ([]);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.流程表')
AND name = N'IX_流程表_关联计划_流程'
)
CREATE NONCLUSTERED INDEX [IX_流程表_关联计划_流程]
ON [dbo].[] ([], [ID])
INCLUDE ([]);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO
SELECT OBJECT_NAME(i.object_id) AS [], i.name AS []
FROM sys.indexes AS i
WHERE i.name IN
(
N'IX_零件图纸_num',
N'IX_工艺库_订单_顺序',
N'IX_质检记录_质检类型_计划号',
N'IX_人员信息_姓名_班组',
N'IX_流程表_关联计划_流程'
)
ORDER BY [], [];
GO

View File

@@ -0,0 +1,45 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
DECLARE @Definition nvarchar(max) =
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725'));
DECLARE @ProcedurePosition int;
IF @Definition IS NULL
THROW 51500, N'未找到预算功能部署前的核心查询备份过程。', 1;
SET @Definition = REPLACE(
@Definition,
N'[dbo].[计划排产_装配任务查询_核心_预算前_20260725]',
N'[dbo].[计划排产_装配任务查询_核心]'
);
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
IF @ProcedurePosition = 0
THROW 51501, N'未识别核心查询备份过程定义头。', 1;
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
EXEC sys.sp_executesql @Definition;
DROP PROCEDURE IF EXISTS dbo.[_装配任务预算_保存];
COMMIT TRANSACTION;
GO
-- 两张预算表可能已包含人工录入数据,回滚时有意保留,避免数据丢失。
SELECT [name], [type_desc], [modify_date]
FROM sys.objects
WHERE [name] IN
(
N'计划排产_装配任务预算',
N'计划排产_装配合同预算',
N'计划排产_装配任务查询_核心',
N'计划排产_装配任务查询_核心_预算前_20260725'
)
ORDER BY [name];
GO

View File

@@ -0,0 +1,82 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @ProcedureName sysname;
DECLARE @Definition nvarchar(max);
DECLARE @AlterPosition int;
DECLARE @AssemblySelect nvarchar(250) = N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时';
DECLARE @QualitySelect nvarchar(250) = N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时';
DECLARE @GroupBy nvarchar(100) = N'GROUP BY gs.订单合同号';
DECLARE ProcedureCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT [name]
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
OPEN ProcedureCursor;
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@ProcedureName)));
IF @Definition IS NULL
THROW 51100, N'未找到待回滚的存储过程。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @AssemblySelect, N''))) / LEN(@AssemblySelect) <> 1
THROW 51101, N'合同装配工时汇总代码与修复版本不一致,已停止回滚。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @QualitySelect, N''))) / LEN(@QualitySelect) <> 1
THROW 51102, N'合同质检工时汇总代码与修复版本不一致,已停止回滚。', 1;
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @GroupBy, N''))) / LEN(@GroupBy) <> 2
THROW 51103, N'合同工时分组代码与修复版本不一致,已停止回滚。', 1;
SET @Definition = REPLACE(
@Definition,
@AssemblySelect,
N'SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时'
);
SET @Definition = REPLACE(
@Definition,
@QualitySelect,
N'SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时'
);
SET @Definition = REPLACE(@Definition, @GroupBy, N'GROUP BY gs.合同号');
SET @AlterPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
IF @AlterPosition = 0
THROW 51104, N'存储过程定义中未找到 ALTER PROCEDURE。', 1;
EXEC sys.sp_executesql @Definition;
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
END;
CLOSE ProcedureCursor;
DEALLOCATE ProcedureCursor;
COMMIT TRANSACTION;
SELECT [name], [modify_date]
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
END TRY
BEGIN CATCH
IF CURSOR_STATUS('local', 'ProcedureCursor') >= 0
CLOSE ProcedureCursor;
IF CURSOR_STATUS('local', 'ProcedureCursor') > -3
DEALLOCATE ProcedureCursor;
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,72 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
GO
DECLARE @Name sysname;
DECLARE @BackupName sysname;
DECLARE @Definition nvarchar(max);
DECLARE @HeaderPosition int;
DECLARE @HeaderLength int;
DECLARE RestoreCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT v.[name], v.[backup_name]
FROM
(
VALUES
(N'计划排产_系统类任务查询', N'计划排产_系统类任务查询_优化前_20260725'),
(N'计划排产_阀类任务查询', N'计划排产_阀类任务查询_优化前_20260725')
) AS v([name], [backup_name]);
OPEN RestoreCursor;
FETCH NEXT FROM RestoreCursor INTO @Name, @BackupName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@BackupName)));
IF @Definition IS NULL
THROW 51300, N'未找到优化前备份过程,停止回滚。', 1;
SET @Definition = REPLACE(
@Definition,
N'[dbo].[' + @BackupName + N']',
N'[dbo].[' + @Name + N']'
);
SET @HeaderPosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
SET @HeaderLength = LEN(N'CREATE PROCEDURE');
IF @HeaderPosition = 0
BEGIN
SET @HeaderPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
SET @HeaderLength = LEN(N'ALTER PROCEDURE');
END;
IF @HeaderPosition = 0
THROW 51301, N'未识别备份过程定义头。', 1;
SET @Definition = STUFF(
@Definition,
@HeaderPosition,
@HeaderLength,
N'ALTER PROCEDURE'
);
EXEC sys.sp_executesql @Definition;
FETCH NEXT FROM RestoreCursor INTO @Name, @BackupName;
END;
CLOSE RestoreCursor;
DEALLOCATE RestoreCursor;
DROP PROCEDURE IF EXISTS dbo.[_装配任务查询_核心];
COMMIT TRANSACTION;
GO
SELECT [name], [modify_date]
FROM sys.procedures
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
ORDER BY [name];
GO

View File

@@ -0,0 +1,32 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.物料基础数据_零件图纸') AND name = N'IX_零件图纸_num')
DROP INDEX [IX_零件图纸_num] ON [dbo].[_零件图纸];
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.车间生产管理工艺_零件生产工艺_工艺库') AND name = N'IX_工艺库_订单_顺序')
DROP INDEX [IX_工艺库_订单_顺序] ON [dbo].[_零件生产工艺_工艺库];
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.YL_质量检验_质检记录') AND name = N'IX_质检记录_质检类型_计划号')
DROP INDEX [IX_质检记录_质检类型_计划号] ON [dbo].[YL_质量检验_质检记录];
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.登录基础数据_人员信息') AND name = N'IX_人员信息_姓名_班组')
DROP INDEX [IX_人员信息_姓名_班组] ON [dbo].[_人员信息];
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.流程表') AND name = N'IX_流程表_关联计划_流程')
DROP INDEX [IX_流程表_关联计划_流程] ON [dbo].[];
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,47 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
GO
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725', N'P') IS NULL
THROW 51610, N'未找到登录查询过程安全修复前备份。', 1;
DECLARE @definition nvarchar(max) = OBJECT_DEFINITION(
OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725')
);
DECLARE @procedurePosition int;
SET @definition = REPLACE(
@definition,
N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725',
N'dbo.菜单模块系统_用户名密码_查询数据'
);
SET @definition = REPLACE(
@definition,
N'[dbo].[菜单模块系统_用户名密码_查询数据_安全修复前_20260725]',
N'[dbo].[菜单模块系统_用户名密码_查询数据]'
);
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @definition);
IF @procedurePosition = 0
THROW 51611, N'登录查询过程备份结构异常,停止回滚。', 1;
SET @definition = N'ALTER ' + SUBSTRING(
@definition,
@procedurePosition,
LEN(@definition)
);
EXEC sys.sp_executesql @definition;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,39 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
GO
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725', N'P') IS NULL
THROW 51510, N'未找到测试环境 SAP 适配前备份过程。', 1;
DECLARE @sql nvarchar(max) = OBJECT_DEFINITION(
OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725')
);
DECLARE @procedurePosition int;
SET @sql = REPLACE(
@sql,
N'[dbo].[计划排产_装配任务查询_核心_测试跳过SAP前_20260725]',
N'[dbo].[计划排产_装配任务查询_核心]'
);
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @sql);
IF @procedurePosition = 0
OR CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @sql) = 0
THROW 51511, N'测试环境 SAP 适配备份结构异常,停止回滚。', 1;
SET @sql = N'ALTER ' + SUBSTRING(@sql, @procedurePosition, LEN(@sql));
EXEC sys.sp_executesql @sql;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,76 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
GO
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据', N'P') IS NULL
THROW 51600, N'未找到登录查询过程。', 1;
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725', N'P') IS NOT NULL
THROW 51601, N'登录查询过程安全修复前备份已存在,停止重复部署。', 1;
DECLARE @definition nvarchar(max) = OBJECT_DEFINITION(
OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据')
);
DECLARE @procedurePosition int = CHARINDEX(N'PROCEDURE', @definition);
IF @procedurePosition = 0
THROW 51602, N'无法识别登录查询过程定义。', 1;
SET @definition = REPLACE(
@definition,
N'dbo.菜单模块系统_用户名密码_查询数据',
N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725'
);
SET @definition = REPLACE(
@definition,
N'[dbo].[菜单模块系统_用户名密码_查询数据]',
N'[dbo].[菜单模块系统_用户名密码_查询数据_安全修复前_20260725]'
);
SET @definition = N'CREATE ' + SUBSTRING(
@definition,
@procedurePosition,
LEN(@definition)
);
EXEC sys.sp_executesql @definition;
EXEC sys.sp_executesql N'
ALTER PROCEDURE [dbo].[菜单模块系统_用户名密码_查询数据]
@用户名 nvarchar(50) = NULL,
@密码 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
[Roles_number],
[Roles_Function],
[Personnel_Number],
[account],
[Personnel_Name],
[Departments_ID],
[Quit],
[部门名称],
[OrgUnit],
[班组]
FROM [dbo].[登录基础数据_管理人员权限视图]
WHERE [account] = @用户名
AND [password] = @密码
AND [Quit] = 0;
END;';
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据')) LIKE N'%SELECT *%'
THROW 51603, N'登录查询过程仍包含 SELECT *,停止部署。', 1;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,85 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
GO
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心', N'P') IS NULL
THROW 51500, N'未找到装配任务核心查询过程。', 1;
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725', N'P') IS NOT NULL
THROW 51501, N'测试环境 SAP 适配前备份过程已存在,停止重复部署。', 1;
DECLARE @sql nvarchar(max) = OBJECT_DEFINITION(
OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')
);
DECLARE @backupSql nvarchar(max) = REPLACE(
@sql,
N'[dbo].[计划排产_装配任务查询_核心]',
N'[dbo].[计划排产_装配任务查询_核心_测试跳过SAP前_20260725]'
);
DECLARE @procedurePosition int = CHARINDEX(N'PROCEDURE', @backupSql);
IF @procedurePosition = 0
THROW 51502, N'未识别核心查询过程定义头。', 1;
SET @backupSql = N'CREATE ' + SUBSTRING(
@backupSql,
@procedurePosition,
LEN(@backupSql)
);
EXEC sys.sp_executesql @backupSql;
DECLARE @keysPosition int = CHARINDEX(N'INTO #交货键', @sql);
DECLARE @blockStart int = CHARINDEX(N' SELECT', @sql, @keysPosition + 1);
DECLARE @blockEnd int = CHARINDEX(
N' CREATE UNIQUE CLUSTERED INDEX [CX_交货]',
@sql,
@blockStart
);
DECLARE @oldBlock nvarchar(max);
IF @keysPosition = 0 OR @blockStart = 0 OR @blockEnd = 0
THROW 51503, N'未找到核心查询的 SAP 交货日期代码块。', 1;
SET @oldBlock = SUBSTRING(@sql, @blockStart, @blockEnd - @blockStart);
IF CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @oldBlock) = 0
THROW 51504, N'交货日期代码块不是预期的 SAP 链接查询。', 1;
DECLARE @newBlock nvarchar(max) = N' -- 测试环境无法连接现场 SAP保留返回结构但不等待远程交货日期。
SELECT
k.[合同号],
k.[物料编号],
CAST(NULL AS datetime) AS [交货日期理论齐套日期]
INTO #交货
FROM #交货键 AS k;
';
SET @sql = STUFF(
@sql,
@blockStart,
@blockEnd - @blockStart,
@newBlock
);
IF CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @sql) > 0
OR CHARINDEX(N'测试环境无法连接现场 SAP', @sql) = 0
THROW 51505, N'测试环境 SAP 适配替换失败。', 1;
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @sql);
SET @sql = N'ALTER ' + SUBSTRING(@sql, @procedurePosition, LEN(@sql));
EXEC sys.sp_executesql @sql;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

View File

@@ -0,0 +1,119 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时报表_任务工时_查询]
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ bit = CASE WHEN EXISTS
(
SELECT 1
FROM [dbo].[_角色信息]
WHERE CONVERT(nvarchar(100), [Roles_number]) = @
AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')
) THEN 1 ELSE 0 END;
;WITH base AS
(
SELECT
r.[RID], r.[DID], ISNULL(r.[], N'') AS [],
t.[], t.[], t.[], t.[], t.[],
t.[], ISNULL(t.[], N'') AS [],
r.[], r.[], ISNULL(r.[], 0) AS [],
r.[], r.[],
ISNULL(notes.[], N'') AS [],
ISNULL(notes.[], N'') AS [],
r.[]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
OUTER APPLY
(
SELECT
STRING_AGG(CASE WHEN n.[] = N'异常说明' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[])), N''), NULLIF(LTRIM(RTRIM(n.[ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[] DESC, n.[SID] DESC) AS [],
STRING_AGG(CASE WHEN n.[] = N'奇思妙想' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[])), N''), NULLIF(LTRIM(RTRIM(n.[ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[] DESC, n.[SID] DESC) AS []
FROM [dbo].[MES_设计报工_任务说明] AS n
WHERE n.[DID] = t.[DID]
) AS notes
WHERE r.[] IS NOT NULL
AND r.[] IS NOT NULL
AND (@ IS NULL OR r.[] >= @)
AND (@ IS NULL OR r.[] < DATEADD(day, 1, @))
AND (ISNULL(@, N'') = N'' OR r.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
AND (@ = 1 OR (NULLIF(LTRIM(RTRIM(@)), N'') IS NOT NULL AND (ISNULL(t.[], N'') = LTRIM(RTRIM(@)) OR ISNULL(r.[], N'') = LTRIM(RTRIM(@)))))
), result AS
(
SELECT 1 AS [Level], N't-' + CAST([DID] AS nvarchar(20)) AS [id], CAST(N'' AS nvarchar(120)) AS [parentId], CAST(N'' AS nvarchar(100)) AS [], CAST(N'' AS nvarchar(20)) AS [], CAST(NULL AS int) AS [RID], [DID], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], CONVERT(varchar(19), MIN([]), 120) AS [], CONVERT(varchar(19), MAX([]), 120) AS [], COUNT(1) AS [], CAST(SUM([]) / 3600.0 AS decimal(18, 2)) AS [], CASE WHEN SUM(CONVERT(int, [])) = COUNT(1) THEN N'已校验' WHEN SUM(CONVERT(int, [])) = 0 THEN N'未校验' ELSE N'部分校验' END AS [], ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [], 120) + NCHAR(13) + NCHAR(10) + []) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [], [RID]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(MAX([]), N'') AS [], ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), []) END, NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [], [RID]), N'') AS []
FROM base GROUP BY [DID]
UNION ALL
SELECT 2 AS [Level], N't-' + CAST([DID] AS nvarchar(20)) + N'-o-' + [], N't-' + CAST([DID] AS nvarchar(20)), [], CAST(N'' AS nvarchar(20)), CAST(NULL AS int), [DID], CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(200)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(500)), CAST(N'' AS nvarchar(max)), CONVERT(varchar(19), MIN([]), 120), CONVERT(varchar(19), MAX([]), 120), COUNT(1), CAST(SUM([]) / 3600.0 AS decimal(18, 2)), CASE WHEN SUM(CONVERT(int, [])) = COUNT(1) THEN N'已校验' WHEN SUM(CONVERT(int, [])) = 0 THEN N'未校验' ELSE N'部分校验' END, ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [], 120) + NCHAR(13) + NCHAR(10) + []) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [], [RID]), N''), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), []) END, NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [], [RID]), N'')
FROM base GROUP BY [DID], []
)
SELECT * FROM result ORDER BY [DID] DESC, [Level], [];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时报表_作业者工时_查询]
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ bit = CASE WHEN EXISTS (SELECT 1 FROM [dbo].[_角色信息] WHERE CONVERT(nvarchar(100), [Roles_number]) = @ AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')) THEN 1 ELSE 0 END;
;WITH base AS
(
SELECT r.[RID], r.[DID], ISNULL(r.[], N'') AS [], CONVERT(varchar(10), r.[], 120) AS [], t.[], t.[], t.[], t.[], t.[], t.[], ISNULL(t.[], N'') AS [], r.[], r.[], ISNULL(r.[], 0) AS [], r.[], r.[], ISNULL(notes.[], N'') AS [], ISNULL(notes.[], N'') AS [], r.[]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
OUTER APPLY
(
SELECT STRING_AGG(CASE WHEN n.[] = N'异常说明' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[])), N''), NULLIF(LTRIM(RTRIM(n.[ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[] DESC, n.[SID] DESC) AS [], STRING_AGG(CASE WHEN n.[] = N'奇思妙想' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[])), N''), NULLIF(LTRIM(RTRIM(n.[ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[] DESC, n.[SID] DESC) AS []
FROM [dbo].[MES_设计报工_任务说明] AS n WHERE n.[DID] = t.[DID]
) AS notes
WHERE r.[] IS NOT NULL AND r.[] IS NOT NULL AND (@ IS NULL OR r.[] >= @) AND (@ IS NULL OR r.[] < DATEADD(day, 1, @)) AND (ISNULL(@, N'') = N'' OR r.[] LIKE N'%' + @ + N'%') AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%') AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%') AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%') AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%') AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID) AND (@ = 1 OR (NULLIF(LTRIM(RTRIM(@)), N'') IS NOT NULL AND (ISNULL(t.[], N'') = LTRIM(RTRIM(@)) OR ISNULL(r.[], N'') = LTRIM(RTRIM(@)))))
), result AS
(
SELECT 1 AS [Level], N'p-' + [] AS [id], CAST(N'' AS nvarchar(100)) AS [parentId], [], CAST(N'' AS nvarchar(20)) AS [], CAST(NULL AS int) AS [RID], CAST(NULL AS int) AS [DID], CAST(N'' AS nvarchar(100)) AS [], CAST(N'' AS nvarchar(100)) AS [], CAST(N'' AS nvarchar(200)) AS [], CAST(N'' AS nvarchar(100)) AS [], CAST(N'' AS nvarchar(100)) AS [], CAST(N'' AS nvarchar(500)) AS [], CAST(N'' AS nvarchar(max)) AS [], CAST(N'' AS varchar(19)) AS [], CAST(N'' AS varchar(19)) AS [], COUNT(1) AS [], CAST(SUM([]) / 3600.0 AS decimal(18, 2)) AS [], CAST(N'' AS nvarchar(20)) AS [], CAST(N'' AS nvarchar(max)) AS [], CAST(N'' AS nvarchar(max)) AS [], CAST(N'' AS nvarchar(max)) AS [], CAST(N'' AS nvarchar(max)) AS []
FROM base GROUP BY []
UNION ALL
SELECT 2 AS [Level], N'd-' + [] + N'-' + [], N'p-' + [], [], [], CAST(NULL AS int), CAST(NULL AS int), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(200)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(500)), CAST(N'' AS nvarchar(max)), CAST(N'' AS varchar(19)), CAST(N'' AS varchar(19)), COUNT(1), CAST(SUM([]) / 3600.0 AS decimal(18, 2)), CAST(N'' AS nvarchar(20)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max))
FROM base GROUP BY [], []
UNION ALL
SELECT 3 AS [Level], N'r-' + CAST([RID] AS nvarchar(20)), N'd-' + [] + N'-' + [], [], [], [RID], [DID], ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), CONVERT(varchar(19), [], 120), CONVERT(varchar(19), [], 120), 1, CAST([] / 3600.0 AS decimal(18, 2)), CASE WHEN [] = 1 THEN N'已校验' ELSE N'未校验' END, ISNULL([], N''), ISNULL([], N''), ISNULL([], N''), ISNULL([], N'')
FROM base
)
SELECT * FROM result ORDER BY [], [], [Level], [RID];
END
GO