set nocount on declare @TableName sysname , @ColumnName sysname , @ColumnType int , @ColOrder int , @TableID int , @ExecStr varchar(4000) , @HeadStr varchar(4000) , @MaxCol int , @ColList bit set @TableName = 'BorgUser' set @ColList = 1 set @TableID = object_id(@TableName) set @HeadStr = '(' select @MaxCol = max(colorder) from syscolumns where id = @TableID declare ColumnList cursor scroll for select name, type, colorder from syscolumns where id = @TableID order by colorder open ColumnList fetch first from ColumnList into @ColumnName, @ColumnType, @ColOrder while @@fetch_status <> -1 begin set @HeadStr = @HeadStr + case when @ColOrder < @MaxCol then @ColumnName + ', ' else @ColumnName + ')' end fetch next from ColumnList into @ColumnName, @ColumnType, @ColOrder end if @ColList = 1 set @ExecStr = 'SELECT ''INSERT INTO ' + @TableName + ' ' + @HeadStr + ' VALUES ('' + ' else set @ExecStr = 'SELECT ''INSERT INTO ' + @TableName + ' VALUES ('' + ' fetch first from ColumnList into @ColumnName, @ColumnType, @ColOrder while @@fetch_status <> -1 begin set @ExecStr = @ExecStr + case when @ColumnType in (48, 50, 52, 56, 60) then 'convert(varchar, ' + @ColumnName + ')' when @ColumnType in (61) then ''''''''' + replace(convert(varchar, ' + @ColumnName + ', 102), ''.'', '''') + ''''''''' else '''N'' + '''''''' + ' +'replace(' + @ColumnName + ', '''''''', '''''''''''') + ''''''''' end + case when @ColOrder < @MaxCol then ', ' else ' + '')'' FROM ' + @TableName end fetch next from ColumnList into @ColumnName, @ColumnType, @ColOrder end deallocate ColumnList --exec ('select ''dummy'' [INSERT INTO ' + @TableName + ' (], *, ''dummy'' [)] from ' + @TableName + ' where 1 = 2') select @HeadStr exec (@Execstr)