/* Suppose: in order to interface with the legacy CISC system, no
   blanks can be permitted in City names that are interfaced. The IS 
   director has requested a data fix script to remove blanks from all 
   interfaced files. The Stores table does not get interfaced. 	

declare @table varchar(30),  		-- table name working field
        @city varchar(20),		-- city name working field
	@inner_cursor varchar(255),	-- literal to define the inner cursor
	@action_to_take varchar(255)	-- literal to define the action to complete 

set nocount on

declare outer_cursor cursor
select name 
  from sysobjects 
  where id in (select id
                from syscolumns 
                where name = 'city')	-- tables that have a city field
  and name like "%rs" 			-- authors & publishers but not stores    
  and type = 'U' 			-- user tables only

  open outer_cursor
    fetch next from outer_cursor into @table
    while (@@fetch_status != -1)
        select @inner_cursor = "declare inner_cursor cursor for select city from " + @table + " for update of city"
        exec (@inner_cursor) 
          open inner_cursor
            fetch next from inner_cursor into @city
            while (@@fetch_status != -1)
                /*SQL Server needs a little help with apostrophes in the column */ 
                if (PATINDEX("%'%", @city) != 0)
		    select @city = STUFF(@city,1,PATINDEX("%'%",@city)-1,substring(@city,1,PATINDEX("%'%",@city)-1)+"'")
                /*Take all the spaces out */   
                while (PATINDEX("% %",@city) != 0)
                    select @city = STUFF(@city,1, PATINDEX("% %",@city),substring (@city,1, PATINDEX("% %",@city)-1))
                select @action_to_take = "update " + @table + " set city ='"+ @city + "' where current of inner_cursor" 
                exec (@action_to_take)
                fetch next from inner_cursor into @city
            deallocate inner_cursor
        fetch next from outer_cursor into @table
    deallocate outer_cursor