|  | Posted by Roy Harvey on 02/23/07 01:52 
I don't see why you would have to update each column in an individualquery.  Why not SET all the columns in one UPDATE?  The code below
 would simplify that.  @tablename is used rather than a hardcoded value
 to facilitate turning it into a stored procedure.
 
 declare @tblname nvarchar(60)
 set @tblname = 'PROFILE'
 
 SELECT CASE WHEN C.colid = 1
 THEN 'UPDATE ' + O.name + CHAR(13) + CHAR(10) +
 '   SET '
 ELSE '       '
 END +
 C.name + '= replace(cast(' + C.name +
 ' as nvarchar(255)),char(13)+char(10),'':'')' +
 CASE
 WHEN C.colid < (select max(colid) from syscolumns CC
 where O.id = CC.id)
 THEN ','
 ELSE ';'
 END
 FROM sysobjects O
 JOIN syscolumns C
 ON O.id = C.id
 WHERE O.name = @tblname
 ORDER BY C.id, C.colid
 
 Output from one test exeuction:
 
 UPDATE HoldEventsTable
 SET TelephoneCallID= replace(cast(TelephoneCallID as
 nvarchar(255)),char(13)+char(10),':'),
 Time= replace(cast(Time as
 nvarchar(255)),char(13)+char(10),':'),
 Event= replace(cast(Event as
 nvarchar(255)),char(13)+char(10),':');
 
 Roy Harvey
 Beacon Falls, CT
 
 On 22 Feb 2007 16:01:40 -0800, "JackpipE" <pipe.jack@gmail.com> wrote:
 
 >> There is no way to loop through the columns in a table in a simple
 >> fashion. This is because that it would rarely make any sense; columns
 >> in a table are supposed to described distinct attribuets.
 >>
 >> For a thing like this I would do:
 >>
 >>    SELECT 'UPDATE PROFILE SET ' + name + ' replace(substring( ' +
 >>           name + ', 1, 255), char(13) + char(10), '':'')'
 >>    FROM   syscolumns
 >>    WHERE  id = object_id('PROFILE')
 >>      and  type_name(xtype) like '%char'
 >>
 >> and the copy, paste and run result.
 >
 >
 >Well that simplify my job but still does not automate the process to a
 >point where one query execution will take care of entire table.
 >
 >Thanks.
  Navigation: [Reply to this message] |