136 lines
4.0 KiB
Transact-SQL
136 lines
4.0 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.ProjectRestorePoints', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.ProjectRestorePoints
|
|
(
|
|
ProjectRestorePointID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_ProjectRestorePoints PRIMARY KEY,
|
|
ProjectID int NOT NULL,
|
|
RestorePointName nvarchar(255) NOT NULL,
|
|
RestorePointType nvarchar(50) NOT NULL,
|
|
CreatedDateUtc datetime2 NOT NULL CONSTRAINT DF_ProjectRestorePoints_CreatedDateUtc DEFAULT SYSUTCDATETIME(),
|
|
JsonData nvarchar(max) NOT NULL,
|
|
JsonSizeBytes bigint NOT NULL,
|
|
Notes nvarchar(max) NULL,
|
|
CONSTRAINT FK_ProjectRestorePoints_Projects FOREIGN KEY (ProjectID) REFERENCES dbo.Projects(ProjectID)
|
|
);
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_ProjectRestorePoints_ProjectCreated' AND object_id = OBJECT_ID(N'dbo.ProjectRestorePoints'))
|
|
CREATE INDEX IX_ProjectRestorePoints_ProjectCreated ON dbo.ProjectRestorePoints(ProjectID, CreatedDateUtc DESC);
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ProjectRestorePoint_List
|
|
@ProjectID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
SELECT rp.ProjectRestorePointID, rp.ProjectID, p.ProjectName, rp.RestorePointName, rp.RestorePointType,
|
|
rp.CreatedDateUtc, CAST(NULL AS nvarchar(max)) AS JsonData, rp.JsonSizeBytes, rp.Notes
|
|
FROM dbo.ProjectRestorePoints rp
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = rp.ProjectID
|
|
WHERE rp.ProjectID = @ProjectID
|
|
ORDER BY rp.CreatedDateUtc DESC, rp.ProjectRestorePointID DESC;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ProjectRestorePoint_Get
|
|
@ProjectRestorePointID int,
|
|
@ProjectID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
SELECT rp.ProjectRestorePointID, rp.ProjectID, p.ProjectName, rp.RestorePointName, rp.RestorePointType,
|
|
rp.CreatedDateUtc, rp.JsonData, rp.JsonSizeBytes, rp.Notes
|
|
FROM dbo.ProjectRestorePoints rp
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = rp.ProjectID
|
|
WHERE rp.ProjectRestorePointID = @ProjectRestorePointID
|
|
AND rp.ProjectID = @ProjectID;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ProjectRestorePoint_Create
|
|
@ProjectID int,
|
|
@RestorePointName nvarchar(255),
|
|
@RestorePointType nvarchar(50),
|
|
@JsonData nvarchar(max),
|
|
@Notes nvarchar(max) = NULL
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
INSERT INTO dbo.ProjectRestorePoints
|
|
(
|
|
ProjectID,
|
|
RestorePointName,
|
|
RestorePointType,
|
|
CreatedDateUtc,
|
|
JsonData,
|
|
JsonSizeBytes,
|
|
Notes
|
|
)
|
|
VALUES
|
|
(
|
|
@ProjectID,
|
|
@RestorePointName,
|
|
@RestorePointType,
|
|
SYSUTCDATETIME(),
|
|
@JsonData,
|
|
DATALENGTH(@JsonData),
|
|
@Notes
|
|
);
|
|
|
|
DECLARE @ProjectRestorePointID int = SCOPE_IDENTITY();
|
|
|
|
SELECT rp.ProjectRestorePointID, rp.ProjectID, p.ProjectName, rp.RestorePointName, rp.RestorePointType,
|
|
rp.CreatedDateUtc, CAST(NULL AS nvarchar(max)) AS JsonData, rp.JsonSizeBytes, rp.Notes
|
|
FROM dbo.ProjectRestorePoints rp
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = rp.ProjectID
|
|
WHERE rp.ProjectRestorePointID = @ProjectRestorePointID;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ProjectRestorePoint_Count
|
|
@ProjectID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
SELECT COUNT(1)
|
|
FROM dbo.ProjectRestorePoints
|
|
WHERE ProjectID = @ProjectID;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ProjectRestorePoint_Delete
|
|
@ProjectRestorePointID int,
|
|
@ProjectID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
IF OBJECT_ID(N'dbo.ProjectRestoreHistory', N'U') IS NOT NULL
|
|
BEGIN
|
|
UPDATE dbo.ProjectRestoreHistory
|
|
SET SourceRestorePointID = NULL
|
|
WHERE SourceRestorePointID = @ProjectRestorePointID;
|
|
|
|
UPDATE dbo.ProjectRestoreHistory
|
|
SET SafetyRestorePointID = NULL
|
|
WHERE SafetyRestorePointID = @ProjectRestorePointID;
|
|
END;
|
|
|
|
DELETE FROM dbo.ProjectRestorePoints
|
|
WHERE ProjectRestorePointID = @ProjectRestorePointID
|
|
AND ProjectID = @ProjectID;
|
|
|
|
SELECT CAST(CASE WHEN @@ROWCOUNT = 1 THEN 1 ELSE 0 END AS bit);
|
|
END;
|
|
GO
|