Improving the code from @Simas Joneliunas (answer above)
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2;
IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results;
CREATE TABLE #temp2 (val VARCHAR(8000))
CREATE TABLE #Results (val VARCHAR(8000))
DECLARE @TABLE_NAME varchar(256) = 'TableName'
DECLARE @Columns NVARCHAR(MAX)
SELECT
IDENTITY(int, 1, 1) seq_no, COLUMN_NAME
INTO #temp
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME NOT IN ('valid_from', 'valid_to')
DECLARE @Data AS NVARCHAR(MAX)
SELECT
@Data = COALESCE(@Data + ',''|'',', '') + COLUMN_NAME
FROM #temp
SELECT @Columns = STRING_AGG(COLUMN_NAME, ', ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME NOT IN ('valid_from', 'valid_to') -- Ignore temporal table columns
DECLARE @query VARCHAR(1000) = 'SELECT CONCAT(' + @Data + ') from ' + @TABLE_NAME --+ ' where ' + @COND_COL + ' = ''' + @COND + ''''
INSERT INTO #temp2
EXEC(@query)
INSERT INTO #Results (val)
SELECT
'SET IDENTITY_INSERT dbo.' + @TABLE_NAME + ' ON;'
UNION
SELECT
REPLACE(REPLACE(CONCAT('INSERT INTO dbo.',@TABLE_NAME,'(' + @Columns + ') VALUES(''', REPLACE(val,'|',''',''') ,''')'),',''''',',NULL'),','''',',',NULL,') AS Query
FROM #temp2
UNION
SELECT
'SET IDENTITY_INSERT dbo.' + @TABLE_NAME + ' OFF;'
SELECT
*
FROM #Results
ORDER BY
CASE
WHEN val = 'SET IDENTITY_INSERT dbo.' + @TABLE_NAME + ' ON;' THEN 1
WHEN val = 'SET IDENTITY_INSERT dbo.' + @TABLE_NAME + ' OFF;' THEN 100
ELSE 50
END;