PDC_REPORT_CreazioneDB/sql/Produzione/procedure/dbo_CopyObjectFromSchema.sql
2025-06-10 15:29:00 +02:00

74 lines
2.8 KiB
Transact-SQL

--[dbo].[CopyObjectFromSchema] 'C6Mart', 'tt4', 'RP_'
CREATE procedure [dbo].[CopyObjectFromSchema]
@FromSchemaName NVARCHAR(50),
@ToSchemaName NVARCHAR(50),
@LikeName NVARCHAR(MAX)
AS
Begin
DECLARE @ObjCopyName VARCHAR(MAX);
DECLARE @ObjContent nvarchar(MAX);
DECLARE @ObjIDSchemaTo INT
if (@FromSchemaName is null Or @FromSchemaName = '' Or
@ToSchemaName is null Or @ToSchemaName = '')
begin
RAISERROR ('Valorizzare entrambi gli Schema Name!', -- Message text.
16, -- Severity.
1 -- State.
);
return
end
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = @ToSchemaName))
BEGIN
EXEC ('CREATE SCHEMA ' + @ToSchemaName + ' AUTHORIZATION [dbo]')
END
SET @ObjIDSchemaTo = (SELECT SCHEMA_ID FROM sys.schemas WHERE name= @ToSchemaName)
DECLARE TABLECURSOR CURSOR FOR
SELECT [NAME] FROM sys.objects WHERE [TYPE] in (N'U') and schema_id = (SELECT SCHEMA_ID FROM sys.schemas WHERE name= @FromSchemaName)
AND [NAME] LIKE '%' + @LikeName + '%'
OPEN TABLECURSOR
FETCH NEXT FROM TABLECURSOR INTO @ObjCopyName
WHILE @@FETCH_STATUS = 0
BEGIN --STORED PROC LOOP
BEGIN TRY
PRINT @ObjCopyName
IF (EXISTS (SELECT * FROM sys.objects WHERE name = @ObjCopyName and schema_id = (SELECT SCHEMA_ID FROM sys.schemas WHERE name= @ToSchemaName)))
BEGIN
execute dbo.DropObject @ObjCopyName, @ObjIDSchemaTo
END
Declare @statement nvarchar(max)
Set @statement = 'SELECT * INTO ' + @ToSchemaName + '.' + @ObjCopyName + ' FROM ' + @FromSchemaName + '.' + @ObjCopyName + ' WHERE 1=2'
print @statement
execute sp_executeSQL @statement
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH
FETCH NEXT FROM TABLECURSOR INTO @ObjCopyName
END
CLOSE TABLECURSOR;
DEALLOCATE TABLECURSOR;
DECLARE PROCCURSOR CURSOR FOR
SELECT NAME, REPLACE (OBJECT_DEFINITION(OBJECT_ID), @FromSchemaName, @ToSchemaName)
FROM sys.objects WHERE [TYPE] in (N'P', N'PC', N'FN', N'V') and schema_id = (SELECT SCHEMA_ID FROM sys.schemas WHERE name= @FromSchemaName)
AND NAME LIKE '%' + @LikeName + '%' ORDER BY [TYPE]
OPEN PROCCURSOR
FETCH NEXT FROM PROCCURSOR INTO @ObjCopyName, @ObjContent
WHILE @@FETCH_STATUS = 0
BEGIN --STORED PROC LOOP
BEGIN TRY
PRINT @ObjCopyName
PRINT @ObjContent
IF (EXISTS (SELECT * FROM sys.objects WHERE name = @ObjCopyName and schema_id = (SELECT SCHEMA_ID FROM sys.schemas WHERE name= @ToSchemaName)))
BEGIN
execute dbo.DropObject @ObjCopyName, @ObjIDSchemaTo
END
execute sp_executeSQL @statement = @ObjContent
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE(), @ObjCopyName, @ObjContent
END CATCH
FETCH NEXT FROM PROCCURSOR INTO @ObjCopyName, @ObjContent
END --STORED PROC LOOP
CLOSE PROCCURSOR;
DEALLOCATE PROCCURSOR;
END