Saturday, 20 April 2019

Dynamically Generated Alter Table Script In Sql Server

ALTER PROCEDURE [dbo].[SP_Generate_AlterColumn]
AS
BEGIN
DECLARE @PRINT_RESULT VARCHAR(MAX)=''
DECLARE @COLUMN_EXIST VARCHAR(MAX)=''
DECLARE @TABLE_EXIST VARCHAR(MAX)=''

DECLARE db_cursor CURSOR FOR

SELECT OBJECT_NAME(sc.[object_id]),sc.[name] as [column]
FROM [sys].[columns] sc
JOIN [sys].[objects] so
ON sc.[object_id] = so.[object_id]
--WHERE  OBJECT_NAME(sc.[object_id])='TABLENAME'
ORDER BY so.modify_date DESC, so.create_date ASC

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @TABLE_EXIST,@COLUMN_EXIST 
IF  EXISTS
(
SELECT * FROM [sys].[columns] sc
JOIN [sys].[objects] so
ON sc.[object_id] = so.[object_id]
JOIN sys.tables ON  sc.object_id = tables.object_id
WHERE OBJECT_NAME(sc.[object_id])= @TABLE_EXIST AND sc.name = @COLUMN_EXIST
)
BEGIN
WHILE @@FETCH_STATUS = 0 
BEGIN 
 
  SET @PRINT_RESULT = 'ALTER TABLE ' + @TABLE_EXIST + ' ADD ' + @COLUMN_EXIST + ' '+
  (
SELECT temp.system_type_name FROM
(
SELECT * FROM sys.dm_exec_describe_first_result_set 
(
'SELECT * FROM ['+ @TABLE_EXIST +'] ', NULL, 0
)
) AS temp WHERE temp.name=@COLUMN_EXIST
  )
  FETCH NEXT FROM db_cursor INTO @TABLE_EXIST,@COLUMN_EXIST
  PRINT @PRINT_RESULT
END
END

CLOSE db_cursor 
DEALLOCATE db_cursor
END

No comments:

Post a Comment