• You can check for the existence of an identity column and then exclude it from the insert list as well as not altering the temp table definition

    The insert statement into ##TMPTBL1 also needs to be changed

    DECLARE @IDENTCOL as VARCHAR(50)

    select @IDENTCOL = isnull(c.[name],'TAB_ID_MARKER ')

    FROMsys.columns AS c

    INNER JOIN

    sys.tables AS t

    ON t.[object_id] = c.[object_id]

    where t.[name] = @TABLE_NAME

    and c.is_identity = 1

    DECLARE STRUCTURE SCROLL CURSOR FOR

    SELECT COLUMN_NAME,DATA_TYPE

    FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK)

    WHERE TABLE_NAME=@TABLE_NAME

    AND COLUMN_NAME <> @IDENTCOL

    ORDER BY ORDINAL_POSITION ASC

    if @IDENTCOL = 'TAB_ID_MARKER'

    BEGIN

    SELECT @CMD='SELECT * INTO ##TEMP_TABLE FROM '+@TABLE_NAME+'

    ALTER TABLE ##TEMP_TABLE ADD TAB_ID_MARKER INT IDENTITY(1,1)'

    END

    ELSE

    BEGIN

    SELECT @CMD='SELECT * INTO ##TEMP_TABLE FROM '+@TABLE_NAME+''

    END

    SELECT @CMD= 'SELECT '+@FLD+' INTO ##TMPTBL1 FROM ##TEMP_TABLE WHERE ' + @IDENTCOL + '='+CONVERT(VARCHAR(10),@COUNTER)