Generate insert statement for data in table SQL Server


DECLARE @TABLE_NAME AS NVARCHAR(1000)
SET @TABLE_NAME = 'Dim_Date'
DECLARE @SCHEMA_NAME AS NVARCHAR(1000)
SET @SCHEMA_NAME = 'dbo'

DECLARE @OBJECT_ID AS BIGINT
SET @OBJECT_ID = (SELECT TOP 1 object_id FROM sys.objects WHERE NAME = @TABLE_NAME AND schema_id = (
SELECT  TOP 1 schema_id FROM sys.schemas WHERE name = @SCHEMA_NAME)
)

DECLARE @TABLE_ROW AS TABLE (
	Id INT,
	name VARCHAR(100)
)
INSERT INTO @TABLE_ROW (Id,[name])
SELECT ROW_NUMBER() OVER (ORDER BY column_id),name FROM sys.columns 
WHERE object_id = @OBJECT_ID
AND is_identity = 0
ORDER BY column_id

DECLARE @Columns AS VARCHAR(4000)
SET @Columns = (
select  stuff(list,1,1,'')
from    (
        select  ',' + cast(QUOTENAME(name) as varchar(4000)) as [text()]
        from    @TABLE_ROW
        for     xml path('')
        ) as Sub(list)
)
DECLARE @SelectColumns AS VARCHAR(4000)
SET @SelectColumns = (
select  stuff(list,1,1,'')
from    (
        select  ', N''''''+CONVERT(VARCHAR(8000), ISNULL('+cast(QUOTENAME(name) as varchar(4000))+',''''))+''''''' --',' + cast(name as varchar(16)) as [text()]
        from    @TABLE_ROW
        for     xml path('')
        ) as Sub(list)
)


 SELECT @Columns,@SelectColumns
 SELECT * FROM @TABLE_ROW

DECLARE @SQL_STR AS VARCHAR(MAX)
SET @SQL_STR = '
SELECT  ''INSERT INTO ['+ @SCHEMA_NAME+ '].['+ @TABLE_NAME + '] ( '+@Columns+') VALUES ('+@SelectColumns+')''
FROM ['+ @SCHEMA_NAME+ '].['+ @TABLE_NAME + '] 
'
EXEC ( @SQL_STR)

 
 

Leave a comment