Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS SQL2000 - Kollation ändern? (https://www.delphipraxis.net/13444-ms-sql2000-kollation-aendern.html)

Sharky 18. Dez 2003 14:56


MS SQL2000 - Kollation ändern?
 
Hai,

ich wollte heute die Daten von meinem SQL-7 Server auf den SQL-2000 übertragen.
Dazu habe ich eine Sicherung der Datenbank gemacht und diese dann im SQL-2000 wiederhergestellt.

So weit so gut. Wenn ich nun aber einen Datensatz anlegen möchte in dem ein Feld vom Typ Text ist bekomme ich immer die Fehlermeldung das eine Codepageübersetzung von 1252 in 850 fehlgeschlagen ist.

Nun gut. Also habe ich mit
SQL-Code:
ALTER DATABASE db_name COLLATE Latin1_General_CI_AS
die Standardsortierung für diese Datenbank geändert.

Leider behält der böse Server aber in den Tabelle immer noch die alte Codepage (SQL_Latin1_General_CP850_CI_AS).

Jetzt könnte ich natürlich von Hand alle Text-Datenfelder ändern.
Aber bei weit über 100 Tabelle ist das echt hart.

Kennt jemand eine andere Lösung für mein Problem?

Leuselator 18. Dez 2003 15:10

Re: MS SQL2000 - Kollation ändern?
 
War Unsinn - siehe weiter unten...

Sharky 18. Dez 2003 15:19

Re: MS SQL2000 - Kollation ändern?
 
Hai Leuselator,

ich sehe eben mit grauen das auch die ganzen VCHAR davon betroffen sind.
Es muss doch möglich sein eine Datenbank von SQL 7 auf 2000 zu bekommen :shock:

Sonst stirbt der neue SQL ganz schnell wieder :cry:

Sharky 18. Dez 2003 15:36

Re: MS SQL2000 - Kollation ändern?
 
Ich glaube ich habe es.

Ich habe jetzt die Datenbank nicht "Wiederhergestellt" sondern über die Importfunktion vom alten Server geholt. In diesem Fall scheint er wohl die Standardsortierung der vorhandenen Datenbank zu nehmen. Morgenfrüh muss ich das dann noch alles testen.

Aber intressieren würde mich trotzdem wie es geht.

Leuselator 18. Dez 2003 15:36

Re: MS SQL2000 - Kollation ändern?
 
Das aber :-)
SQL-Code:
select 'alter table '+so.name+' alter column '+sc.name+' '+st.name+' ('+convert(varchar,sc.length)+') COLLATE Latin1_General_CI_AS ;'
      from Sysobjects so
inner join syscolumns sc
        on sc.id = so.id
inner join systypes st
        on st.xtype = sc.xtype
     where so.type = 'U'
       and sc.collation = 'Alter_Collation_Typ'
Das im Query-Analyser abschicken, dann Ergebnis (alles)markieren und in neue Query einfügen - abschicken - fertig

Ändert alles in der aktiven (Analyser) DB, was die alte Collation hat auf die neue

Wär doch gelacht :-)

Sharky 19. Dez 2003 07:47

Re: MS SQL2000 - Kollation ändern?
 
:thuimb:

Ich danke Dir! Das kommt doch sofort in den Ordner mit der Aufschrift : "Top-Wichtige-Befehle"

Leuselator 20. Dez 2003 11:29

Re: MS SQL2000 - Kollation ändern?
 
na wer so lieb bittet, bekommt von mir sogar 'ne Stored Procedure :-)
SQL-Code:
CREATE PROCEDURE dbo.SP_AlterAllCollations
(
 @OLDCOLLATE varchar(255)
,@NEWCOLLATE varchar(255)
)
AS
BEGIN
  declare @Befehl nvarchar(4000)
         ,@err int

  declare BefehlsCursor CURSOR FOR select 'alter table '+so.name+' alter column '+sc.name+' '+st.name+' ('+convert(varchar,sc.length)+') COLLATE '+@NEWCOLLATE AS Befehl
                                     from Sysobjects so
                               inner join syscolumns sc
                                       on sc.id = so.id
                               inner join systypes st
                                       on st.xtype = sc.xtype
                                    where so.type = 'U'
                                      and sc.collation = @OLDCOLLATE
  FETCH NEXT FROM BefehlsCursor INTO @Befehl
  set @err = 0
  BEGIN TRANSACTION
  WHILE @@FETCH_STATUS = 0 BEGIN
    exec(@Befehl)
    set @err = @err+@@Error
    FETCH NEXT FROM BefehlsCursor INTO @Befehl
    set @err = @err+@@Error
  END
  if @err <> 0 BEGIN
    ROLLBACK TRANSACTION
    RAISERROR('Irgendwas ist schief gegangen',16,-1)
    RETURN 50000
  END
  COMMIT TRANSACTION
  RETURN 0
END

radi5 16. Nov 2004 15:20

Re: MS SQL2000 - Kollation ändern?
 
Hallo Ihr,

interessiert habe ich Euren Ansatz verfolgt. Genau das suche ich gerade. Leider
kommen bei verschiedenen Feldern Fehlermeldungen nach dem Schema:
SQL-Code:
Server: Msg 5074, Level 16, State 8, Line 1
The object 'pk_dtproperties' is dependent on column 'property'.
Server: Msg 4922, Level 16, State 1, Line 1
ALTER TABLE ALTER COLUMN property failed because one or more objects access this column.
Soweit ich verstanden habe handelt es sich dabei um verletzte Constraints. Leider habe ich keine Ahnung, wie sich das alles unter den Vorraussetzungen automatisieren läßt.

Weiß jemand Rat?

Viele Grüße
radi5


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz