Avatar billede chris Nybegynder
16. juli 2001 - 14:18 Der er 17 kommentarer og
2 løsninger

Replace Æ Å Ø

Er der nogen der har hørt om et tool eller script (SP), der kan lave en replace i en hel database (alle tabeller og felter).
Grunden er at jeg en SQL 6.5, (med US characterset), som er blevet upsizet til SQL7, med norsk/dansk tegnset.
Æ,Å og Ø ser weird ud, og vil nu gerne have replacet de underlige tegn med Æ Ø og Å.

anyone?
Avatar billede torbenkoch Nybegynder
16. juli 2001 - 18:31 #1
I alle tabeller og felter? Man kan nok godt, det er ret besværligt, men absolut muligt. Men ikke for 60 point - det er noget med at rode rundt i systables og syscolumns databaserne for at finde strukturen i tabellerne, for derefter at køre nogle queries, der typisk vil bruge en replace funktion til at bytte (underligt tegn 1) ud med æ osv. osv.

Det er muligt, men besværligt!!
Avatar billede chris Nybegynder
16. juli 2001 - 21:07 #2
Hej Torben
Jeg har et script (SP) der replacer alle de tegn jeg har brug for.

Mit problem er nu bare at jeg ikke får alt tekst med fra \"Text\" felter. Af en eller anden grund bliver der cuttet i teksten. Sådan lidt vilkårligt. Nogle gang efter 542 tegn andre gang efter 718 tegn.
Har du et bud på hvorfor ?

-----------
Her er starten af scriptet:
CREATE PROCEDURE SKIFT

    @TABELNAVN VARCHAR(30),
    @RAEKKENAVN VARCHAR(50)
AS

DECLARE @SQLSTRENG varchar(300)
DECLARE @FRATEGN CHAR(1)
DECLARE @TILTEGN CHAR(1)

SET @FRATEGN = \'°\'
SET @TILTEGN = \'ø\'

SET @SQLSTRENG = \'update \' + @TABELNAVN + \' set \' +  @RAEKKENAVN + \' = replace(convert(nvarchar(4000), \' + @RAEKKENAVN  + \' ), \'\'\'+ @FRATEGN + \'\'\',\'\'\' +  @TILTEGN+\'\'\' )\'


og det gantates med alle de tegn der skal konverteres.
Avatar billede torbenkoch Nybegynder
16. juli 2001 - 22:08 #3
Du må naturligvis ikke bruge din convert på et text felt - så vil du naturligvis får skåret noget af, det siger sig selv. Så det går altså ikke... Hvorfor der så lige bliver skåret på nogle underlige steder, det ved jeg altså ikke rigtigt.

Ved faktisk ikke om man kan lave replace direkte på et text-felt, efter hjælpen at dømme, ser det ud til, at man kan. Der står i hvert ikke, at man IKKE kan lave det stunt med text-felter... ;-)
Avatar billede chris Nybegynder
16. juli 2001 - 22:40 #4
ok takker....

men hvordan mon jeg så griber det an\'? Har du et forslag til hvordan...?
Kan sagtens sprøjte flere point på tavlen ;-)
Avatar billede torbenkoch Nybegynder
16. juli 2001 - 22:56 #5
Hvis du laver følgende:

select
  \'update \' + so.name + \' set \' + sc.name + \' = replace(\' + sc.name + \',\"¤\", \"Ø\")\'
  + char(13) + char(10) + \'GO \' + char(13) + char(10)
from syscolumns sc
join sysobjects so on so.id = sc.id
where so.type = \'U\'
      and sc.xtype in (175, 239, 99, 231, 35, 167)


Så får du en lang række sql sætninger, som laver replace. Så kan du selv regne ud, hvordan du laver de andre bogstaver.

Tallene i parentes (175 osv.) er taget fra tabellen systypes. Kan godt være jeg mangler et par stykker.

Prøv det af og se, om du kan bruge denne løsning.
Avatar billede chris Nybegynder
16. juli 2001 - 23:11 #6
ok.... det ser lidt hardcore ud :) har aldrig rodet med sysobjects og syscolumns objekterne, men det bliver spændendene at se om det virker.
Jeg kigger på det i morgen, hvor jeg er lidt mere frisk.

go\'nat :-)
Avatar billede chris Nybegynder
17. juli 2001 - 09:33 #7
ahhh fjong fjong.... det virker.

Men hvordan får jeg den så til at udføre den replace i SQL. ?

F.eks denne (som er en af de outputs fra din streng)

update tabelnavn set tabelnavn = replace(feltnavn,\"¤\", \"Ø\")
GO
Avatar billede torbenkoch Nybegynder
17. juli 2001 - 11:56 #8
Ikke forstået??
Avatar billede torbenkoch Nybegynder
17. juli 2001 - 11:56 #9
Du skal jo bare udføre disse generede sql kommandoer i sql query analyzeren...
Avatar billede chris Nybegynder
17. juli 2001 - 12:58 #10
ok..
men mit problem er, at den ikke vil lave en replace på et textfelt.
Når jeg prøver får jeg dette:

Server: Msg 8116, Level 16, State 1, Line 1
Argument data type text is invalid for argument 1 of replace function.
Avatar billede torbenkoch Nybegynder
17. juli 2001 - 13:06 #11
Hmmm - det er selvfølgelig træls - men det virker på de andre typer, ikke??

Skal lige tænke over den med text felter - man skal have gang i UPDATETEXT og PATINDEX funktionerne - men det skal jo helst være ligeså nemt som med de andre felter.
Avatar billede chris Nybegynder
17. juli 2001 - 13:29 #12
ok....

har lige sat nogle flere point på
Avatar billede torbenkoch Nybegynder
17. juli 2001 - 15:11 #13
Min metode virker på den andre typer, ikke??

Jeg kigger lige på de andre i aften - det kan sikkert sagtens lade sig gøre, det er bare lidt mere besværligt!
Avatar billede chris Nybegynder
17. juli 2001 - 15:18 #14
jo den virker på de andre typer...

...det lyder sgu godt :)
Avatar billede torbenkoch Nybegynder
17. juli 2001 - 21:41 #15
Er det SQL 7 eller 2000??
Avatar billede chris Nybegynder
17. juli 2001 - 21:57 #16
SQL7
Avatar billede torbenkoch Nybegynder
18. juli 2001 - 00:33 #17
Hmmm - nåede ikke helt frem til noget, der virker - bliver nødt til at forsætte i morgen aften, når mit hoved er lidt klart igen!!

Skal nok komme med en løsning - de 200 point vil jeg sgisme gerne have *S*
Avatar billede chris Nybegynder
18. juli 2001 - 20:01 #18
Hej Torben
Jeg har nu fundet en løsning.

Jeg bruger asp i stedet for SQL. : Laver en simpel select og derefter en update.
Og puttede alle tabeller og felter ind i et array, og så kørte det derud af.

Du får dog lige 100 point for din venlig/ hjælpsomhed...... tak
Avatar billede torbenkoch Nybegynder
18. juli 2001 - 21:54 #19
Jamen, selv tak da!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester