79458414

Date: 2025-02-21 19:15:18
Score: 0.5
Natty:
Report link

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;
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Simas
  • Low reputation (1):
Posted by: Werner Sauer