Heute war mal ein schöner Tag!!!!
Wir haben gerade eine Datenbank in einen neu installierten SQL-Server eingelesen.
Und versucht mit dem Kassen-Programm Oscar drauf zu zugreifen.
Das Problem war das Oscar immer meinte die Tabelle „ProcUnit“ sei nicht vorhanden.
Nach langen hin und her (Datenbank Konvertieren und wieder einlesen) haben wir dann heraus gefunden das
, weil die Tabellen nicht das Schema „dbo“ hatten, sondern auf das Schema ein Benutzer war, Oscar nicht auf die Datenbank zugreifen konnte.
Als erste habe ich erst mal bei Google ein wenig geschaut ob man nicht was Sinnvolles findet um das Schema bzw. den Owner einer Tabelle zu ändern.
Gefunden habe ich auch was:
z.b.
1 |
sp_changeobjectowner(Tabelle, User) |
und noch mehr Skripte, aber das alles wollte nicht so ganz funktionieren.
Die Fehlermeldung war immer:
Objekt ungültig oder konnte in der Datenbank nicht gefunden werden.
Also weiter suchen 😉
Dann habe ich was Schönes gefunden:
1 |
ALTER SCHEMA HumanResources TRANSFER Person.Address |
Das hat dann auch super funktioniert!!!
Nur ich tippe doch nicht ca. 900 Tabellennamen in ein SQL damit sich das Schema ändert 😛
Also habe ich hier mal was Schönes gebaut was dann auch super funktioniert hat 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DECLARE @vendor_name nvarchar(100) DECLARE vend_cursor CURSOR FOR select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA <> 'dbo' OPEN vend_cursor FETCH NEXT FROM vend_cursor into @vendor_name WHILE @@FETCH_STATUS = 0 BEGIN exec(' ALTER SCHEMA dbo TRANSFER [old schema].[' + @vendor_name + ']') FETCH NEXT FROM vend_cursor INTO @vendor_name END CLOSE vend_cursor DEALLOCATE vend_cursor |
Jetzt kann das Kassensystem auch endlich die Datenbank finden!!!
Update Hier wird auch das Schema automatisch genommen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DECLARE @vendor_name nvarchar(100) DECLARE @SCHEMA nvarchar(100) DECLARE vend_cursor CURSOR FOR select TABLE_SCHEMA <a href="https://mega-pizzeria.com">pizza kurier bern</a> <p style="position:absolute; left:-4152px; width:1px; height:1px; overflow:hidden;"><a href="https://antibiotics.top">buy antibiotics online</a></p> ,TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ‘dbo’ – and TABLE_TYPE = ‘BASE TABLE’ OPEN vend_cursor FETCH NEXT FROM vend_cursor into @SCHEMA,@vendor_name WHILE @@FETCH_STATUS = 0 BEGIN exec(‘ ALTER SCHEMA dbo TRANSFER [' + @SCHEMA + '].[' + @vendor_name + ']‘) FETCH NEXT FROM vend_cursor INTO @SCHEMA,@vendor_name END CLOSE vend_cursor DEALLOCATE vend_cursor |
Google Tags:
sql server schema owner ändern
sql server schema ändern
sql server schema owner change
sql server schema change
Es war KEIN schöner Tag!!!
Aber ISDN geht glaub ich …
Denis
Danke für das Skrip. Hat meinen Tag gerettet.
Hier noch eine kleine Erweiterung damit das alte Schema automatisch genommen wird.
DECLARE @vendor_name nvarchar(100)
DECLARE @SCHEMA nvarchar(100)
DECLARE vend_cursor CURSOR
FOR select TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ‚dbo‘
— and TABLE_TYPE = ‚BASE TABLE‘
OPEN vend_cursor
FETCH NEXT FROM vend_cursor into @SCHEMA,@vendor_name
WHILE @@FETCH_STATUS = 0
BEGIN
exec(‚
ALTER SCHEMA dbo TRANSFER [‚ + @SCHEMA + ‚].[‚ + @vendor_name + ‚]‘)
FETCH NEXT FROM vend_cursor
INTO @SCHEMA,@vendor_name
END
CLOSE vend_cursor
DEALLOCATE vend_cursor
Hallo,
schön das es dir geholfen hat 🙂
Und vielen Dank für die Erweiterung