• You can accomplish the same task using a set based approach which should perform considerably quicker.

    It does work with text and ntext data types, but not image. I have no idea what will happen if geography, geometry or hierarchyid data types are used, you have been warned!

    DECLARE @SchemaName NVARCHAR(128)

    , @TableName NVARCHAR(128);

    SELECT @SchemaName = 'dbo'

    , @TableName = 'MyTable';

    IF ((

    SELECT COUNT(1)

    FROM INFORMATION_SCHEMA.COLUMNS

    WHERE TABLE_NAME = @TableName

    AND TABLE_SCHEMA = @SchemaName

    AND DATA_TYPE IN ('image')

    ) > 0)

    BEGIN

    RAISERROR('Error: The table contains an IMAGE data type, this is unsupported', 18, 1);

    RETURN;

    END

    DECLARE @ColumnNames NVARCHAR(MAX)

    , @ColumnValues NVARCHAR(MAX)

    , @Cmd NVARCHAR(MAX);

    SELECT @ColumnNames =

    STUFF((

    SELECT ', ' + QUOTENAME(COLUMN_NAME)

    FROM INFORMATION_SCHEMA.COLUMNS

    WHERE TABLE_NAME = @TableName

    AND TABLE_SCHEMA = @SchemaName

    ORDER BY ORDINAL_POSITION

    FOR XML PATH('')

    ),1,1,'');

    SELECT @ColumnValues =

    STUFF((

    SELECT ', '' + COALESCE(' +

    CASE WHEN DATA_TYPE IN ('tinyint','smallint','int','real','money','float','bit','decimal','numeric','smallmoney','bigint') THEN '''''' ELSE '''''''''' END +

    ' + CAST(' + COLUMN_NAME + ' AS NVARCHAR(MAX)) + ' +

    CASE WHEN DATA_TYPE IN ('tinyint','smallint','int','real','money','float','bit','decimal','numeric','smallmoney','bigint') THEN '''''' ELSE '''''''''' END +

    ', ''NULL'') + '''

    FROM INFORMATION_SCHEMA.COLUMNS

    WHERE TABLE_NAME = @TableName

    AND TABLE_SCHEMA = @SchemaName

    ORDER BY ORDINAL_POSITION

    FOR XML PATH('')

    ),1,1,'');

    SET @Cmd =

    'SELECT

    ''INSERT INTO ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' (' + @ColumnNames + ') VALUES (' + @ColumnValues + ')''

    FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName);

    PRINT 'Column Names:

    ' + @ColumnNames;

    PRINT '

    Column Values:

    ' + @ColumnValues;

    PRINT '

    Command:

    ' + @Cmd;

    EXEC sp_executesql @Cmd;