Merge pull request 'B2024-041 - Update PromsFixes SQL file to acocunt for replacing vs pasting procs' (#352) from B2024-041_v2 into Development
good for testing phase
This commit is contained in:
commit
afbd653611
@ -22232,12 +22232,13 @@ Go
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
==========================================================================================================
|
==========================================================================================================
|
||||||
Begin: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'')
|
Begin: C2024-004 | B2024-041: KL - Update Copy Replace functionality, (remove ''copy of'')
|
||||||
==========================================================================================================
|
==========================================================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
|
||||||
DROP PROCEDURE [CopyItemAndChildren];
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ReplaceItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
|
DROP PROCEDURE [ReplaceItemAndChildren];
|
||||||
GO
|
GO
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
@ -22247,11 +22248,22 @@ GO
|
|||||||
/*
|
/*
|
||||||
==========================================================================================================
|
==========================================================================================================
|
||||||
Author: Kevin Laskey
|
Author: Kevin Laskey
|
||||||
Modified Date: 07/09/2024
|
Create Date: 07/15/2024
|
||||||
Description: Copy Item and its Children
|
Description: B2024-041: "Copy of" is no longer being appended for paste before/after
|
||||||
==========================================================================================================
|
==========================================================================================================
|
||||||
*/
|
*/
|
||||||
CREATE PROCEDURE [dbo].[CopyItemAndChildren]
|
|
||||||
|
/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 9:29:21 AM ******/
|
||||||
|
SET ANSI_NULLS ON
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||||
|
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
|
||||||
|
*****************************************************************************/
|
||||||
|
CREATE PROCEDURE [dbo].[ReplaceItemAndChildren]
|
||||||
(
|
(
|
||||||
@StartItemID INT,
|
@StartItemID INT,
|
||||||
@DestFormatID INT,
|
@DestFormatID INT,
|
||||||
@ -22296,7 +22308,6 @@ INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID
|
|||||||
-- <<< Copy Contents >>>
|
-- <<< Copy Contents >>>
|
||||||
-- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily
|
-- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily
|
||||||
-- so that the new content rows can be associated with the existing content rows.
|
-- so that the new content rows can be associated with the existing content rows.
|
||||||
-- Rem 'Copy Of ' + before first [Number] for C2024-004 (KL)
|
|
||||||
INSERT INTO Contents
|
INSERT INTO Contents
|
||||||
([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID])
|
([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID])
|
||||||
select CASE when [ContentID] = @StartContentID and [Type]<20000 then [Number] else [Number] end,
|
select CASE when [ContentID] = @StartContentID and [Type]<20000 then [Number] else [Number] end,
|
||||||
@ -22624,13 +22635,618 @@ BEGIN CATCH -- Catch Block
|
|||||||
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
||||||
EXEC vlnErrorHandler
|
EXEC vlnErrorHandler
|
||||||
END CATCH
|
END CATCH
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[PasteItemReplace]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
|
DROP PROCEDURE [PasteItemReplace];
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||||
|
Copyright 2024 - Volian Enterprises, Inc. All rights reserved.
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
==========================================================================================================
|
||||||
|
Author: Kevin Laskey
|
||||||
|
Create Date: 07/15/2024
|
||||||
|
Description: B2024-041: "Copy of" is no longer being appended for paste before/after
|
||||||
|
==========================================================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
SET ANSI_NULLS ON
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON
|
||||||
|
GO
|
||||||
|
/****** Object: StoredProcedure [dbo].[PasteItemReplace] Script Date: 03/20/2012 16:02:54 ******/
|
||||||
|
/*
|
||||||
|
declare @NewItemID int
|
||||||
|
declare @dts datetime
|
||||||
|
set @newitemid = 0
|
||||||
|
set @dts = getdate()
|
||||||
|
exec PasteItemReplace 398,397,20014,@dts,'bodine',@NewItemID output
|
||||||
|
*/
|
||||||
|
-- ItemID is item to replace
|
||||||
|
-- StartItemID is item to copy
|
||||||
|
/*****************************************************************************
|
||||||
|
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||||
|
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
|
||||||
|
*****************************************************************************/
|
||||||
|
CREATE PROCEDURE [dbo].[PasteItemReplace]
|
||||||
|
(
|
||||||
|
@ItemID int=null, @StartItemID int=null,
|
||||||
|
@Type int=null, @DTS datetime, @UserID nvarchar(100),
|
||||||
|
@NewItemID int output
|
||||||
|
)
|
||||||
|
WITH EXECUTE AS OWNER
|
||||||
|
AS
|
||||||
|
BEGIN TRY -- Try Block
|
||||||
|
BEGIN TRANSACTION
|
||||||
|
DECLARE @ContentID AS INT
|
||||||
|
DECLARE @NextItemID AS INT
|
||||||
|
DECLARE @PreviousItemID AS INT
|
||||||
|
DECLARE @ExternalChildCount AS INT
|
||||||
|
DECLARE @ExternalCount AS INT
|
||||||
|
DECLARE @Path AS VARCHAR(MAX)
|
||||||
|
DECLARE @Children AS TABLE
|
||||||
|
(
|
||||||
|
ItemID INT PRIMARY KEY,
|
||||||
|
ContentID INT
|
||||||
|
)
|
||||||
|
|
||||||
|
if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
-- First check if the replaced item can be deleted, i.e. it doesn't have transitions
|
||||||
|
-- pointing to it or children.
|
||||||
|
|
||||||
|
DECLARE @ExternalTrans TABLE
|
||||||
|
(
|
||||||
|
[FromItemID] int,
|
||||||
|
[TransitionID] [int] NOT NULL,
|
||||||
|
[FromID] [int] NOT NULL,
|
||||||
|
[ToID] [int] NOT NULL,
|
||||||
|
[RangeID] [int] NOT NULL,
|
||||||
|
[Config] [nvarchar](max) NULL
|
||||||
|
)
|
||||||
|
SET NOCOUNT ON
|
||||||
|
DECLARE @DeleteID int
|
||||||
|
INSERT INTO DeleteLog (UserID) VALUES (@UserID)
|
||||||
|
SELECT @DeleteID = SCOPE_IDENTITY()
|
||||||
|
SELECT @ContentID = ContentID, @PreviousItemID = PreviousID FROM Items WHERE ItemID = @ItemID
|
||||||
|
SELECT @NextItemID = ItemID FROM Items WHERE PreviousID = @ItemID
|
||||||
|
--SELECT @ExternalCount = count(*) FROM vefn_FindExternalTransitions(@ItemID)
|
||||||
|
SELECT @ExternalChildCount = count(*) FROM vefn_FindExternalChildTransitions(@ItemID)
|
||||||
|
SET @Path = [dbo].[ve_GetShortPath](@ItemID)
|
||||||
|
|
||||||
|
--IF @ExternalCount > 0 AND @NextItemID is null
|
||||||
|
--BEGIN
|
||||||
|
-- RAISERROR ('###Cannot Delete Item###Step %d has External Transitions and has no next step - (%s)',16,1,@ItemID,@Path)
|
||||||
|
-- RETURN
|
||||||
|
--END
|
||||||
|
|
||||||
|
IF @ExternalChildCount > 0
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Delete Item###Step %d has External Transitions to it''s children - (%s)',16,1,@ItemID,@Path)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
-- Copy the item, 'NewItemID' represents the new item(s)
|
||||||
|
-- DestFormatID is the formatid for the destination parent's format
|
||||||
|
DECLARE @DestFormatID int
|
||||||
|
SET @DestFormatID = .dbo.vefn_GetInheritedFormat(@ItemID, 0)
|
||||||
|
EXECUTE ReplaceItemAndChildren @StartItemID, @DestFormatID, @UserID, @NewItemID OUTPUT
|
||||||
|
|
||||||
|
-- Adjust the next/previous to point to the new item
|
||||||
|
|
||||||
|
DECLARE @PreviousID int
|
||||||
|
SELECT @PreviousID = [PreviousID]
|
||||||
|
FROM [ITEMS] II
|
||||||
|
WHERE [ItemID]=@ItemID
|
||||||
|
UPDATE [ITEMS] SET [PreviousID]=@PreviousID where [ItemID]=@NewItemID
|
||||||
|
UPDATE [CONTENTS] SET [Type]=@Type
|
||||||
|
FROM [CONTENTS] CC JOIN [ITEMS] ii ON CC.[ContentID]=II.[ContentID]
|
||||||
|
WHERE [ItemID]=@NewItemID
|
||||||
|
UPDATE [ITEMS] SET [PreviousID]=@NewItemID where [PreviousID]=@ItemID
|
||||||
|
UPDATE [PARTS] SET [ItemID]=@NewItemID where [ItemID]=@ItemID
|
||||||
|
|
||||||
|
-- UPDATE DocVersion if this was a procedure
|
||||||
|
UPDATE DocVersions SET ItemID=@NewItemID where ItemID = @ItemID
|
||||||
|
|
||||||
|
-- If there were 'external transitions' that pointed to the original
|
||||||
|
-- top replaced step, adjust them to point to the new top.
|
||||||
|
INSERT INTO @ExternalTrans SELECT * FROM vefn_FindExternalTransitions(@ItemID)
|
||||||
|
OPTION (MAXRECURSION 10000)
|
||||||
|
IF (SELECT COUNT(*) from @ExternalTrans) > 0
|
||||||
|
BEGIN
|
||||||
|
-- Update content records for the transitions
|
||||||
|
Update CC
|
||||||
|
Set Text = DBO.vefn_FixTransitionText(Text,TT.TransitionID,TT.TranType,TT.ToID,TT.RangeID,@ItemID,@NewItemID)
|
||||||
|
From CONTENTS CC
|
||||||
|
JOIN Transitions TT ON TT.FromID = CC.ContentID
|
||||||
|
WHERE TransitionID in(Select TransitionID from @ExternalTrans)
|
||||||
|
-- Update transitions that point to @ItemID to Point to @NextItemID
|
||||||
|
UPDATE TRANSITIONS
|
||||||
|
SET ToID = case when ToID = @ItemID then @NewItemID else ToID END,
|
||||||
|
RangeID = case when RangeID = @ItemID then @NewItemID else RangeID END
|
||||||
|
WHERE TransitionID in(Select TransitionID from @ExternalTrans)
|
||||||
|
|
||||||
|
DECLARE @typeID int -- AnnotationType
|
||||||
|
SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required'
|
||||||
|
IF(@typeID IS NULL)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian')
|
||||||
|
SELECT @typeID = SCOPE_IDENTITY()
|
||||||
|
END
|
||||||
|
-- Add 'Verification Required' annotions for transtions that pointed to top step
|
||||||
|
-- and need to point to
|
||||||
|
INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID])
|
||||||
|
SELECT ItemID, @typeID,'Verify Replaced Step Transition Destination',@UserID
|
||||||
|
FROM Items where ItemID in (SELECT FromItemID FROM @ExternalTrans)
|
||||||
|
|
||||||
|
END
|
||||||
|
-- Remove the old one
|
||||||
|
|
||||||
|
-- Get list of Children
|
||||||
|
INSERT INTO @Children SELECT * FROM vefn_ChildItems(@ItemID)
|
||||||
|
-- Delete Annotations for @ItemID and children
|
||||||
|
DELETE from Annotations where ItemID in(Select ItemID from @Children)
|
||||||
|
-- Delete Details associated with @ContentID and children
|
||||||
|
DELETE from Details where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete Grids associated with @ContentID and children
|
||||||
|
DELETE from Grids where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete Images associated with @ContentID and children
|
||||||
|
DELETE from Images where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete Entries associated with @ContentID and children
|
||||||
|
DELETE from Entries where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete ROUsages associated with @ContentID and children
|
||||||
|
DELETE from RoUsages where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete ZTransitions records associated with @ContentID and children
|
||||||
|
DELETE FROM ZTransitions where TransitionID
|
||||||
|
in(SELECT TransitionID from Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID)
|
||||||
|
-- Delete Transitions associated with @ContentID and children
|
||||||
|
DELETE FROM Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID
|
||||||
|
-- Delete Parts associated with @ContentID and children
|
||||||
|
DELETE from Parts where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Delete ZContents associated with @ContentID and children
|
||||||
|
DELETE from ZContents where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Disconnect Items from Each Other
|
||||||
|
DELETE from Items where ItemID in(Select ItemID from @Children) and PreviousID Is Not Null
|
||||||
|
-- Disconnect Items to be deleted from each other
|
||||||
|
Update Items set PreviousID = null where ItemID in (Select ItemID from @Children) and PreviousID Is Not Null
|
||||||
|
-- Delete Item Records
|
||||||
|
DELETE from Items where ItemID in(Select ItemID from @Children)
|
||||||
|
-- DELETE Contents
|
||||||
|
DELETE from Contents where ContentID in(Select ContentID from @Children)
|
||||||
|
--delete from itemaudits where itemid = @newitemid
|
||||||
|
delete from itemaudits where itemid in (select itemid from vefn_ChildItems(@newitemid))
|
||||||
|
--delete from contentaudits where contentid = (select contentid from items where itemid = @newitemid)
|
||||||
|
delete from contentaudits where contentid in (select contentid from vefn_ChildItems(@newitemid))
|
||||||
|
DELETE from DeleteLog where DeleteID = @DeleteID
|
||||||
|
IF( @@TRANCOUNT > 0 ) COMMIT
|
||||||
|
EXECUTE GetItem @NewItemID
|
||||||
|
END TRY
|
||||||
|
BEGIN CATCH -- Catch Block
|
||||||
|
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
|
||||||
|
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
||||||
|
EXEC vlnErrorHandler
|
||||||
|
END CATCH
|
||||||
|
go
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
|
DROP PROCEDURE [CopyItemAndChildren];
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||||
|
Copyright 2024 - Volian Enterprises, Inc. All rights reserved.
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
==========================================================================================================
|
||||||
|
Author: Kevin Laskey
|
||||||
|
Create Date: 07/15/2024
|
||||||
|
Description: B2024-041: "Copy of" is no longer being appended for paste before/after
|
||||||
|
==========================================================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 10:01:59 AM ******/
|
||||||
|
SET ANSI_NULLS ON
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||||
|
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
|
||||||
|
*****************************************************************************/
|
||||||
|
CREATE PROCEDURE [dbo].[CopyItemAndChildren]
|
||||||
|
(
|
||||||
|
@StartItemID INT,
|
||||||
|
@DestFormatID INT,
|
||||||
|
@UserID NVARCHAR(100),
|
||||||
|
@NewStartItemID int output
|
||||||
|
)
|
||||||
|
WITH EXECUTE AS OWNER
|
||||||
|
AS
|
||||||
|
BEGIN TRY -- Try Block
|
||||||
|
|
||||||
|
--+-----------------------------------------------------------------+
|
||||||
|
--& BEGIN TRANSACTION to make these changes temporary &
|
||||||
|
--+-----------------------------------------------------------------+
|
||||||
|
BEGIN TRANSACTION
|
||||||
|
if exists (select * from tblitems where itemid = @StartItemID and DeleteStatus !=0)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Paste Step###This step has been deleted',16,1)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
DECLARE @Children AS TABLE
|
||||||
|
(
|
||||||
|
ItemID INT PRIMARY KEY,
|
||||||
|
NewItemID INT,
|
||||||
|
ContentID INT,
|
||||||
|
NewContentID INT,
|
||||||
|
FormatID INT,
|
||||||
|
NewFormatID INT
|
||||||
|
)
|
||||||
|
DECLARE @NewDocuments AS TABLE
|
||||||
|
(
|
||||||
|
DocID INT PRIMARY KEY,
|
||||||
|
NewDocID INT
|
||||||
|
)
|
||||||
|
-- Locals
|
||||||
|
DECLARE @DTS DATETIME -- DTS of all New Items
|
||||||
|
DECLARE @StartContentID INT
|
||||||
|
Select @StartContentID = ContentID from Items where ItemID = @StartItemID
|
||||||
|
SET @DTS = GETDATE() -- Get the current Date and Time
|
||||||
|
-- Get a list of all of the Items to be copied based upon StartItemID and EndItemID
|
||||||
|
-- If the StartItemID = EndItemID then it is a single item and it's children
|
||||||
|
INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID FROM vefn_ChildItemsRange(@StartItemID,@StartItemID,null)
|
||||||
|
-- <<< Copy Contents >>>
|
||||||
|
-- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily
|
||||||
|
-- so that the new content rows can be associated with the existing content rows.
|
||||||
|
INSERT INTO Contents
|
||||||
|
([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID])
|
||||||
|
select CASE when [ContentID] = @StartContentID and [Type]<20000 then 'Copy Of ' + [Number] else [Number] end,
|
||||||
|
[Text],[ContentID],[FormatID],[Config],@DTS,@UserID
|
||||||
|
from Contents where ContentID in(Select ContentID from @Children)
|
||||||
|
-- Update the @Children with the NewConentIDs
|
||||||
|
--print 'A ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
UPDATE NN set NN.NewContentID = CC.ContentID
|
||||||
|
From Contents CC
|
||||||
|
Join @Children NN on NN.ContentID = CC.Type AND CC.DTS = @DTS and CC.UserID = @UserID
|
||||||
|
-- Reset the Type column in the Contents table with the Type column from the original Records.
|
||||||
|
--print 'B ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
DECLARE @SourceType INT
|
||||||
|
Select @SourceType = Type from Contents where ContentID = @StartContentID
|
||||||
|
if @SourceType = 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE CC set CC.Type = CC2.Type, CC.DTS = CC2.DTS, CC.UserID = CC2.UserID
|
||||||
|
From Contents CC
|
||||||
|
Join @Children NN on NN.NewContentID = CC.ContentID
|
||||||
|
Join Contents CC2 on NN.ContentID = CC2.ContentID
|
||||||
|
END
|
||||||
|
else
|
||||||
|
BEGIN
|
||||||
|
UPDATE CC set CC.Type = CC2.Type
|
||||||
|
From Contents CC
|
||||||
|
Join @Children NN on NN.NewContentID = CC.ContentID
|
||||||
|
Join Contents CC2 on NN.ContentID = CC2.ContentID
|
||||||
|
END
|
||||||
|
--print 'B1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Contents are done
|
||||||
|
-- SELECT * From Contents where DTS = @DTS and UserID = @UserID
|
||||||
|
-- <<< Copy Grids >>>
|
||||||
|
INSERT INTO [Grids]([ContentID],[Data],[Config],[DTS],[UserID])
|
||||||
|
SELECT NN.[NewContentID],[Data],[Config],@DTS,@UserID
|
||||||
|
FROM [Grids] GG Join @Children NN on GG.ContentID = NN.ContentID
|
||||||
|
-- <<< Copy Images >>>
|
||||||
|
--print 'B2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
INSERT INTO [Images]([ContentID],[ImageType],[FileName],[Data],[Config],[DTS],[UserID])
|
||||||
|
SELECT NN.[NewContentID],[ImageType],[FileName],[Data],[Config],@DTS,@UserID
|
||||||
|
FROM [Images] II Join @Children NN on II.ContentID = NN.ContentID
|
||||||
|
-- Create new item rows based upon the current item rows and the @Children table, with the NewContentIDs
|
||||||
|
--print 'B3 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
INSERT INTO [Items] ([PreviousID],[ContentID],[DTS],[UserID])
|
||||||
|
SELECT II.[PreviousID], -- Leave the PreviousID as is for now
|
||||||
|
NN.NewContentID, @DTS, @UserID
|
||||||
|
from @Children NN
|
||||||
|
join Items II on II.ContentID = NN.ContentID
|
||||||
|
-- Update the @Children with the NewItemIDs
|
||||||
|
--print 'B4 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
UPDATE NN set NN.NewItemID = II.ItemID
|
||||||
|
From Items II
|
||||||
|
Join @Children NN on NN.NewContentID = II.ContentID AND II.DTS = @DTS and II.UserID = @UserID
|
||||||
|
DECLARE @NewItemID int
|
||||||
|
SELECT @NewItemID = NewItemID
|
||||||
|
FROM @Children
|
||||||
|
WHERE ItemID = @StartItemID
|
||||||
|
--print 'B5 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
UPDATE NN SET NN.[NewFormatID] = CC.[FormatID]
|
||||||
|
FROM @Children NN
|
||||||
|
Join vefn_ChildItemsRange(@NewItemID,@NewItemID,@DestFormatID) CC
|
||||||
|
ON NN.NewItemID = CC.ItemID
|
||||||
|
-- The @Children table is now complete
|
||||||
|
--SELECT * From @Children
|
||||||
|
-- Update the PreviousID in the new Item rows, to the new ItemIDs based upon the old ItemIDs
|
||||||
|
--print 'B6 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
Update II Set II.[PreviousID] = NN.NewItemID
|
||||||
|
from Items II
|
||||||
|
Join @Children NN on NN.ItemID = II.PreviousID AND II.DTS = @DTS and II.UserID = @UserID
|
||||||
|
-- Get the new ItemIDs based upon the old ItemIDs
|
||||||
|
SELECT @NewStartItemID = NewItemID from @Children where ItemID = @StartItemID
|
||||||
|
--SELECT @NewEndItemID = NewItemID from @Children where ItemID = @EndItemID
|
||||||
|
-- Set the PreviousID for the starting Item to null temporarily.
|
||||||
|
-- This will be adjusted based upon where the step is inserted.
|
||||||
|
--print 'B7 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
Update Items Set PreviousID = null where ItemID = @NewStartItemID
|
||||||
|
if @SourceType = 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE II SET II.DTS = II2.DTS, II.UserID = II2.UserID
|
||||||
|
From Items II
|
||||||
|
Join @Children NN on NN.NewItemID = II.ItemID
|
||||||
|
Join Items II2 on NN.ItemID = II2.ItemID
|
||||||
|
WHERE NN.ItemID = @StartItemID
|
||||||
|
END
|
||||||
|
--print 'C ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Items are done
|
||||||
|
--SELECT * From Items where DTS = @DTS and UserID = @UserID
|
||||||
|
-- <<< Copy Parts >>>
|
||||||
|
INSERT INTO [Parts] ([ContentID],[FromType],[ItemID],[DTS],[UserID])
|
||||||
|
Select NNF.NewContentID,[FromType],NNT.NewItemID, @DTS, @UserID from Parts PP
|
||||||
|
JOIN @Children NNF on PP.ContentID = NNF.ContentID
|
||||||
|
JOIN @Children NNT on PP.ItemID = NNT.ItemID
|
||||||
|
--print 'D ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Parts are done
|
||||||
|
-- SELECT * From Parts where DTS = @DTS and UserID = @UserID
|
||||||
|
-- <<< Copy Annotations >>>
|
||||||
|
INSERT INTO [Annotations] ([ItemID],[TypeID],[RtfText],[SearchText],[Config],[DTS],[UserID])
|
||||||
|
Select NewItemID, TypeID, RtfText, SearchText, Config, @DTS, @UserID
|
||||||
|
from Annotations AA Join @Children NN on AA.ItemID = NN.ItemID
|
||||||
|
--print 'E ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Annotations are done
|
||||||
|
-- SELECT * From Annotations where DTS = @DTS and UserID = @UserID
|
||||||
|
-- <<< Copy Documents and Entries>>>
|
||||||
|
-- logic to create Entries for Library Documents
|
||||||
|
INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID])
|
||||||
|
SELECT NN.[NewContentID],EE.[DocID],@DTS,@UserID
|
||||||
|
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||||
|
JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') <> ''
|
||||||
|
-- Logic to create new documents for any documents used that do not have libtitles
|
||||||
|
INSERT INTO [Documents] ([LibTitle],[DocContent],[DocAscii],[Config],[DTS],[UserID],[FileExtension])
|
||||||
|
OUTPUT CAST(INSERTED.[LibTitle] as INT),INSERTED.[DocID] INTO @NewDocuments
|
||||||
|
SELECT str(DD.[DocID]),[DocContent],[DocAscii],[Config],@DTS,@UserID,[FileExtension]
|
||||||
|
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||||
|
JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') = ''
|
||||||
|
UPDATE DD SET LibTitle = ''
|
||||||
|
FROM Documents DD JOIN @NewDocuments ND on DD.[DocID] = ND.[NewDocID]
|
||||||
|
where DTS = @DTS and UserID = @UserID
|
||||||
|
--print 'F ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Documents are Done
|
||||||
|
-- SELECT * From Documents where DTS = @DTS and UserID = @UserID
|
||||||
|
-- Logic to create entries for these newly created documents
|
||||||
|
INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID])
|
||||||
|
SELECT NN.[NewContentID],ND.[NewDocID],@DTS,@UserID
|
||||||
|
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||||
|
JOIN @NewDocuments ND on EE.[DocID] = ND.[DocID]
|
||||||
|
-- Logic to Create DROUsages for these newly created documents
|
||||||
|
INSERT INTO [DROUsages] ([DocID],[ROID],[Config],[DTS],[UserID],[RODbID])
|
||||||
|
SELECT ND.[NewDocID],[ROID],[Config],@DTS,@UserID,[RODbID]
|
||||||
|
FROM [DROUsages] RR
|
||||||
|
JOIN @NewDocuments ND on RR.[DocID] = ND.[DocID]
|
||||||
|
|
||||||
|
--print 'G ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Entries are done
|
||||||
|
-- SELECT * From Entries EE JOIN Documents DD on ee.DocID = DD.DocID where EE.DTS = @DTS and EE.UserID = @UserID
|
||||||
|
-- <<< Copy RoUsages >>>
|
||||||
|
INSERT INTO [RoUsages] ([ContentID],[ROID],[Config],[DTS],[UserID],[RODbID])
|
||||||
|
SELECT NN.[NewContentID],CAST([ROUsageID] as nvarchar(16)),[Config],@DTS,@UserID,[RODbID]
|
||||||
|
FROM [RoUsages] RR Join @Children NN on RR.ContentID = NN.ContentID
|
||||||
|
-- Update content records for newly copied records to use correct RO usage ids in the RO tags
|
||||||
|
DECLARE @RowsAffected int
|
||||||
|
SET @RowsAffected=1
|
||||||
|
WHILE @RowsAffected > 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE CC SET [TEXT] = C2.NewText
|
||||||
|
FROM CONTENTS CC
|
||||||
|
JOIN (SELECT C1.ContentID, .dbo.vefn_FixROText(C1.Text, CAST([ROID] as int), [ROUsageID]) NewText
|
||||||
|
FROM CONTENTS C1
|
||||||
|
JOIN @Children NN on C1.ContentID = NN.NewContentID
|
||||||
|
JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) C2 ON CC.ContentID = C2.ContentID
|
||||||
|
WHERE [TEXT] <> C2.NewText
|
||||||
|
SET @RowsAffected = @@RowCount
|
||||||
|
END
|
||||||
|
-- Update grid records for newly copied records to use correct RO usage ids in the RO tags
|
||||||
|
SET @RowsAffected=1
|
||||||
|
WHILE @RowsAffected > 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE GG SET [Data] = G2.NewData
|
||||||
|
FROM GRIDS GG
|
||||||
|
JOIN (SELECT G1.ContentID, .dbo.vefn_FixROData(G1.Data, CAST([ROID] as int), [ROUsageID]) NewData
|
||||||
|
FROM GRIDS G1
|
||||||
|
JOIN @Children NN on G1.ContentID = NN.NewContentID
|
||||||
|
JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) G2 ON GG.ContentID = G2.ContentID
|
||||||
|
WHERE Cast([Data] as nvarchar(max)) <> cast(G2.NewData as nvarchar(max))
|
||||||
|
SET @RowsAffected = @@RowCount
|
||||||
|
END
|
||||||
|
UPDATE RON SET [ROID] = ROO.[ROID]
|
||||||
|
FROM RoUsages RON
|
||||||
|
JOIN @Children NN on RON.ContentID = NN.NewContentID
|
||||||
|
JOIN RoUsages ROO on CAST(RON.ROID as int) = ROO.RoUsageID
|
||||||
|
where Len(RON.[ROID]) < 12
|
||||||
|
--print 'H ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- RoUsages are done
|
||||||
|
-- SELECT * From RoUsages where DTS = @DTS and UserID = @UserID
|
||||||
|
|
||||||
|
-- <<< Copy Transtions >>>
|
||||||
|
-- Note that the inserted record has the 'TranType' field set to old transitionid. This is done
|
||||||
|
-- so that the next step can replace the old transitionid with the new transitionid in the
|
||||||
|
-- content record's transition tokens. The TranType gets reset after the content records are
|
||||||
|
-- updated.
|
||||||
|
-- Also note that the 'toid/rangeid' may need converted to newly copied ids or may not. If it's
|
||||||
|
-- not a range, then it always is converted to new, if there is a new. If it's a range, both
|
||||||
|
-- the toid & the rangeid must be new in order for the conversion to be correct. You cannot
|
||||||
|
-- have part of the range pointing to the new and part of the range pointing to the original
|
||||||
|
-- locations.
|
||||||
|
|
||||||
|
INSERT INTO .[dbo].[Transitions] ([FromID],[ToID],[RangeID],[IsRange],[TranType],[Config],[DTS],[UserID])
|
||||||
|
SELECT NNF.[NewContentID],
|
||||||
|
-- if both toid & range are null, use the original toid & rangeid
|
||||||
|
CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [ToID] ELSE NNT.[NewItemID] END,
|
||||||
|
CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [RangeID] ELSE NNR.[NewItemID] END,
|
||||||
|
[IsRange],[TransitionID],[Config],@DTS,@UserID
|
||||||
|
FROM .[dbo].[Transitions] TT
|
||||||
|
JOIN @Children NNF on TT.[FromID] = NNF.[ContentID]
|
||||||
|
LEFT JOIN @Children NNT on TT.[ToID] = NNT.[ItemID]
|
||||||
|
LEFT JOIN @Children NNR on TT.[RangeID] = NNR.[ItemID]
|
||||||
|
--print 'H1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- -- Update content records for newly copied records to use correct TransitionIDs in the Transition tags
|
||||||
|
SET @RowsAffected=1
|
||||||
|
WHILE @RowsAffected > 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE CC SET [TEXT] = C2.NewText
|
||||||
|
FROM CONTENTS CC
|
||||||
|
JOIN (SELECT C1.ContentID, .dbo.vefn_FixTransitionTextForCopy(C1.Text, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewText
|
||||||
|
FROM CONTENTS C1
|
||||||
|
JOIN @Children NN on C1.ContentID = NN.NewContentID
|
||||||
|
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||||
|
JOIN Transitions TRO on TR.TranType = TRO.TransitionID) C2 ON CC.ContentID = C2.ContentID
|
||||||
|
WHERE [TEXT] <> C2.NewText
|
||||||
|
SET @RowsAffected = @@RowCount
|
||||||
|
END
|
||||||
|
--print 'H2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
--set nocount off
|
||||||
|
-- -- Update grid records for newly copied records to use correct TransitionIDs in the Transition tags
|
||||||
|
declare @grids table
|
||||||
|
(
|
||||||
|
contentid int primary key,
|
||||||
|
data xml
|
||||||
|
)
|
||||||
|
insert into @grids select gg.contentid,gg.data from GRIDS GG
|
||||||
|
where gg.contentid in (select nn.newcontentid from
|
||||||
|
@Children NN
|
||||||
|
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||||
|
JOIN Transitions TRO on TR.TranType = TRO.TransitionID)
|
||||||
|
--print 'H2.1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
--select * from @grids
|
||||||
|
SET @RowsAffected=1
|
||||||
|
WHILE @RowsAffected > 0
|
||||||
|
BEGIN
|
||||||
|
UPDATE GG SET [DATA] = G2.NewData
|
||||||
|
FROM @GRIDS GG
|
||||||
|
JOIN (SELECT G1.ContentID, .dbo.vefn_FixTransitionDataForCopy(G1.Data, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewData
|
||||||
|
FROM @GRIDS G1
|
||||||
|
JOIN @Children NN on G1.ContentID = NN.NewContentID
|
||||||
|
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||||
|
JOIN Transitions TRO on TR.TranType = TRO.TransitionID) G2 ON GG.ContentID = G2.ContentID
|
||||||
|
WHERE Cast([DATA] as nvarchar(max)) <> CAST(G2.NewData as nvarchar(max))
|
||||||
|
SET @RowsAffected = @@RowCount
|
||||||
|
END
|
||||||
|
--print 'H2.2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
update GG set data = g1.data from Grids gg join @grids g1 on gg.contentid = g1.contentid
|
||||||
|
--print 'H3 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
--set nocount on
|
||||||
|
-- Add 'Verification Required' AnnotationType
|
||||||
|
DECLARE @typeID int
|
||||||
|
SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required'
|
||||||
|
IF(@typeID IS NULL)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian')
|
||||||
|
SELECT @typeID = SCOPE_IDENTITY()
|
||||||
|
END
|
||||||
|
-- Add "Verification Required" Annotation for each Transition whose transition format changes
|
||||||
|
INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID])
|
||||||
|
SELECT NN.NewItemID, @typeID,'Verify Transition Format',@UserID
|
||||||
|
FROM Transitions TR
|
||||||
|
JOIN @Children NN on TR.FromID = NN.NewContentID
|
||||||
|
JOIN Transitions TRO on TR.TranType = TRO.TransitionID
|
||||||
|
WHERE .dbo.vefn_CompareTranFormat(NN.FormatID, NN.NewFormatID, TRO.TranType) <> 0
|
||||||
|
--print 'H4 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
UPDATE TR SET TR.[TranType] = .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)
|
||||||
|
FROM Transitions TR
|
||||||
|
JOIN @Children NN on TR.FromID = NN.NewContentID
|
||||||
|
JOIN Transitions TRO on TR.TranType = TRO.TransitionID
|
||||||
|
--print 'H5 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
-- Transitions are done
|
||||||
|
-- SELECT * From Transitions where DTS = @DTS and UserID = @UserID
|
||||||
|
--print 'Z ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||||
|
--foldouts fixing code
|
||||||
|
if exists (select * from contents where contentid in (select newcontentid from @children) and config like '%FloatingFoldout%')
|
||||||
|
begin
|
||||||
|
--insert into #mytemp
|
||||||
|
select cc.contentid,xsteps.value('@FloatingFoldout','int') oldfoldoutid,(select newitemid
|
||||||
|
from @children
|
||||||
|
where itemid = xsteps.value('@FloatingFoldout','int')) newfoldoutid,xconfig
|
||||||
|
into #mytemp
|
||||||
|
from (select *,cast(config as xml) xconfig from contents where contentid in (select newcontentid from @children)) cc
|
||||||
|
cross apply xconfig.nodes('Config/Step') tsteps(xsteps)
|
||||||
|
--build @cmd string
|
||||||
|
declare @cmd nvarchar(max)
|
||||||
|
declare cmds cursor for
|
||||||
|
select distinct 'update #mytemp set xconfig.modify(''replace value of (Config/Step/@FloatingFoldout)[1] with "'
|
||||||
|
+ cast(newfoldoutid as varchar(10))
|
||||||
|
+ '"'') where xconfig.value(''(Config/Step/@FloatingFoldout)[1]'',''int'') = '
|
||||||
|
+ cast(oldfoldoutid as varchar(10))
|
||||||
|
from #mytemp
|
||||||
|
--execute cursor over rows
|
||||||
|
open cmds
|
||||||
|
fetch next from cmds into @cmd
|
||||||
|
while @@fetch_status = 0
|
||||||
|
begin
|
||||||
|
exec sp_executesql @cmd
|
||||||
|
fetch next from cmds into @cmd
|
||||||
|
end
|
||||||
|
close cmds
|
||||||
|
deallocate cmds
|
||||||
|
--actually update contents
|
||||||
|
update cc set config = cast(xconfig as varchar(max)) from contents cc join #mytemp mt on cc.contentid = mt.contentid
|
||||||
|
--get rid of #mytemp
|
||||||
|
drop table #mytemp
|
||||||
|
end
|
||||||
|
--end foldouts fixing code
|
||||||
|
--section start
|
||||||
|
DECLARE @NewContentID int
|
||||||
|
Select @NewContentID = NewContentID from @Children where ItemID = @StartItemID
|
||||||
|
DECLARE @Config varchar(max)
|
||||||
|
DECLARE @XConfig xml
|
||||||
|
select @Config = config from contents where contentid = @NewContentID
|
||||||
|
select @XConfig = cast(@Config as xml)
|
||||||
|
if @Config like '%SectionStart%' begin
|
||||||
|
DECLARE @SectionStart int
|
||||||
|
select @SectionStart = xproc.value('@SectionStart','int') from @xconfig.nodes('Config/Procedure') tproc(xproc)
|
||||||
|
DECLARE @NewSectionStart int
|
||||||
|
select @NewSectionStart = newitemid from @children where itemid = @SectionStart
|
||||||
|
DECLARE @cmd2 nvarchar(max)
|
||||||
|
set @cmd2 = '
|
||||||
|
declare @XConfig xml;
|
||||||
|
set @XConfig = cast(''' + @Config + ''' as xml);
|
||||||
|
set @XConfig.modify(''replace value of (Config/Procedure/@SectionStart)[1] with "' + cast(@NewSectionStart as nvarchar(10)) + '"'');
|
||||||
|
update contents set config = cast(@XConfig as varchar(max)) where contentid = ' + cast(@NewContentID as nvarchar(10)) + ';'
|
||||||
|
exec sp_executesql @cmd2
|
||||||
|
end
|
||||||
|
--end section start
|
||||||
|
IF( @@TRANCOUNT > 0 ) COMMIT
|
||||||
|
END TRY
|
||||||
|
BEGIN CATCH -- Catch Block
|
||||||
|
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
|
||||||
|
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
||||||
|
EXEC vlnErrorHandler
|
||||||
|
END CATCH
|
||||||
Go
|
Go
|
||||||
|
|
||||||
IF (@@Error = 0) PRINT 'Procedure Creation: [CopyItemAndChildren] Succeeded'
|
|
||||||
ELSE PRINT 'Procedure Creation: [CopyItemAndChildren] Error on Creation'
|
|
||||||
GO
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==========================================================================================================
|
==========================================================================================================
|
||||||
End: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'')
|
End: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'')
|
||||||
@ -22673,8 +23289,8 @@ BEGIN TRY -- Try Block
|
|||||||
DECLARE @RevDate varchar(255)
|
DECLARE @RevDate varchar(255)
|
||||||
DECLARE @RevDescription varchar(255)
|
DECLARE @RevDescription varchar(255)
|
||||||
|
|
||||||
set @RevDate = '07/11/2024 10:29 AM'
|
set @RevDate = '07/16/2024 4:19 AM'
|
||||||
set @RevDescription = 'B2024-037: Bug fix for copy/replace functionality on procedures and steps'
|
set @RevDescription = 'B2024-041: Bug fix for copy/replace functionality on procedures and steps'
|
||||||
|
|
||||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||||
|
Loading…
x
Reference in New Issue
Block a user