![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Here is my replace query and I need to run this on every column in my table. Right now I manually enter the column name (_LANGUAGES_SPOKEN) but this is time consuming and would like to automate this process as much as possible. Update PROFILE SET LANGUAGES_SPOKEN = replace(cast(_LANGUAGES_SPOKEN as nvarchar(255)),char(13)+char(10),':') |
#3
| |||
| |||
|
|
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. |
#4
| |||
| |||
|
|
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. |
#5
| |||
| |||
|
|
I don't see why you would have to update each column in an individual query. 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 Roy, |
#6
| |||
| |||
|
|
Roy, I had different output when I ran your query: _NAME= replace(cast(_NAME as nvarchar(255)),char(13)+char(10),':'), _NAME= replace(cast(_NAME as nvarchar(255)),char(13)+char(10),':'), _NAME= replace(cast(_NAME as nvarchar(255)),char(13)+char(10),':'), _NAME= replace(cast(_NAME as nvarchar(255)),char(13)+char(10),':'); It looked like select statement output with 17 rows (17 columns in the table) like the above. No UPDATE or SET function. |
#7
| |||
| |||
|
|
Roy, Thank you for your time and helping me out. In my last reply the output I copied was wrong. Here is the code and output I get from your script: declare @tblname nvarchar(60) set @tblname = '_PHYSICIAN_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 42 rows ========= _NAME= replace(cast(_NAME as nvarchar(255)),char(13)+char(10),':'), _SPECIALTY= replace(cast(_SPECIALTY as nvarchar(255)),char(13)+char(10),':'), _GENDER= replace(cast(_GENDER as nvarchar(255)),char(13)+char(10),':'), _SPECIAL_INTERESTS= replace(cast(_SPECIAL_INTERESTS as nvarchar(255)),char(13)+char(10),':'), _PRACTICE_HIGHLIGHTS= replace(cast(_PRACTICE_HIGHLIGHTS as nvarchar(255)),char(13)+char(10),':'), _TRAINING_POST_GRADUATE_EDUCATION= replace(cast(_TRAINING_POST_GRADUATE_EDUCATION as nvarchar(255)),char(13)+char(10),':'), _BOARD_CERTIFICATION= replace(cast(_BOARD_CERTIFICATION as nvarchar(255)),char(13)+char(10),':'), _LANGUAGES_SPOKEN= replace(cast(_LANGUAGES_SPOKEN as nvarchar(255)),char(13)+char(10),':'), _INSURANCE_ACCEPTED= replace(cast(_INSURANCE_ACCEPTED as nvarchar(255)),char(13)+char(10),':'), _PERSONAL_INFORMATION= replace(cast(_PERSONAL_INFORMATION as nvarchar(255)),char(13)+char(10),':'), _ADDRESS1_1= replace(cast(_ADDRESS1_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS1_2= replace(cast(_ADDRESS1_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS1_3= replace(cast(_ADDRESS1_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE1= replace(cast(_PHONE1 as nvarchar(255)),char(13)+char(10),':'), _FAX1= replace(cast(_FAX1 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK1= replace(cast(_IN_NETWORK1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS2_1= replace(cast(_ADDRESS2_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS2_2= replace(cast(_ADDRESS2_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS2_3= replace(cast(_ADDRESS2_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE2= replace(cast(_PHONE2 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK2= replace(cast(_IN_NETWORK2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS3_1= replace(cast(_ADDRESS3_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS3_2= replace(cast(_ADDRESS3_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS3_3= replace(cast(_ADDRESS3_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE3= replace(cast(_PHONE3 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK3= replace(cast(_IN_NETWORK3 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS4_1= replace(cast(_ADDRESS4_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS4_2= replace(cast(_ADDRESS4_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS4_3= replace(cast(_ADDRESS4_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE4= replace(cast(_PHONE4 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK4= replace(cast(_IN_NETWORK4 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS5_1= replace(cast(_ADDRESS5_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS5_2= replace(cast(_ADDRESS5_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS5_3= replace(cast(_ADDRESS5_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE5= replace(cast(_PHONE5 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK5= replace(cast(_IN_NETWORK5 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS6_1= replace(cast(_ADDRESS6_1 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS6_2= replace(cast(_ADDRESS6_2 as nvarchar(255)),char(13)+char(10),':'), _ADDRESS6_3= replace(cast(_ADDRESS6_3 as nvarchar(255)),char(13)+char(10),':'), _PHONE6= replace(cast(_PHONE6 as nvarchar(255)),char(13)+char(10),':'), _IN_NETWORK6= replace(cast(_IN_NETWORK6 as nvarchar(255)),char(13)+char(10),':'), META_SRC_URI= replace(cast(META_SRC_URI as nvarchar(255)),char(13)+char(10),':'); I don't think I filter out anything yet I don't have UPDATE or SET function and the output from this query is just like a select statement that does not execute the replacement. Is there a way actually execute the replace from this stored procedure? |
![]() |
| Thread Tools | |
| Display Modes | |
| |