none
Tabelle kopieren RRS feed

  • Frage

  • Hallo,

    ich möchte eine exakte Kopie einer Tabelle mit Berechtigungen usw. nur ohne Daten mit anderen Namen auf meinen SQL 2000 Server in der gleichen Datenbank machen.

    Nur ich weiß nicht wie? Kann mir wer helfen?

     

    lg

    Freitag, 24. Juni 2011 13:44

Antworten

Alle Antworten

  • Hallo,

    Erzeuge Dir ein Skript für die Tabelle - siehe How to generate a script (Enterprise Manager)
    dort kannst Du auch die Optionen für Berechtigungen uam. auswählen.

    Darauf ändere den Namen der Tabelle und aller Einschränkungen (Primary, Unique, Foreign Key, Default).
    Bei sauberer Namensvergabe ist das durch Suchen und Ersetzen zu machen - bei Wildwestnamen etwas aufwändiger.

    Gruß Elmar

    • Als Antwort vorgeschlagen Falk Krahl Freitag, 1. Juli 2011 10:03
    Freitag, 24. Juni 2011 14:35
    Beantworter
  • hallo,

    tut mir leid, dass ich erst jetzt antworte aber ich war im Urlaub und dann unterwegs.

    Ich brauche also ein Skript das mir eine Tabelle mit allen Berechtigungen usw. nur ohne Daten mit anderen Namen auf meinen SQL 2000 Server in der gleichen Datenbank erzeugt.

    Ich habe nun das Skript gemacht, es sieht so aus, denTabellennamen habe ich vom Namen der original Tabelle auf den der Kopie verändert, sonst wird mir meine original Tabelle überschrieben, d.h. mein Original ist EigeneFirmenSperren.

    Nur meine Frage ist, macht dieses Skript wirklich eine exakte Kopie meiner original Tabelle mit allen Drum und Dran?

    Bei den Optionen habe ich "Skript für Berechtigungen auf Objektebene" und Skript für "Primärschlüssel, Fremdschlüssel, usw." angehackt. Reicht das?

    /****** Objekt:  Tabelle [dbo].[EigeneFirmenSperren]    Skriptdatum: 28.07.2011 14:36:12 ******/
    CREATE TABLE [dbo].[EigeneFirmenSperren_Kopie] (
        [Firma] [char] (255) COLLATE Latin1_General_CI_AS NULL ,
        [BuKreis] [float] NULL ,
        [SherpaNr] [float] NULL ,
        [Debitor] [char] (255) COLLATE Latin1_General_CI_AS NULL ,
        [Kreditor] [char] (255) COLLATE Latin1_General_CI_AS NULL ,
        [WiedenÖffnen] [bit] NULL
    ) ON [PRIMARY]
    GO

    GRANT  REFERENCES ,  SELECT ,  UPDATE ,  INSERT ,  DELETE  ON [dbo].[EigeneFirmenSperren]  TO [timsAdmins]
    GO
    Donnerstag, 28. Juli 2011 12:53
  • Hallo,

    ich habe schon länger keinen SQL Server 2000 mehr zur Hand - deswegen der Erinnerung nach:
    Wenn Du unter Optionen alles auswählst wird die Tabelle komplett mit Referenzen erstellt.

    Da oben kein Primärschlüssel auftaucht, solltest Du die Tabellendefinition überprüfen.

    Zudem wäre zu empfehlen die char(255) in varchar(255) ändern (optional auch kürzen).
    Denn CHAR füllt die Spalte mit Leerzeichen (hier bis zu 255) auf, und Du hast nachher viel Luft in der Datenbank.

    Gruß Elmar

     

    Donnerstag, 28. Juli 2011 15:12
    Beantworter
  • Hallo,

     

    /****** Objekt:  Tabelle [dbo].[EigeneFirmenSperren]    Skriptdatum: 29.07.2011 16:01:08 ******/
    CREATE TABLE [EigeneFirmenSperren] (
        [Firma] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
        [BuKreis] [float] NULL ,
        [SherpaNr] [float] NULL ,
        [Debitor] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
        [Kreditor] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
        [WiedenÖffnen] [bit] NULL
    ) ON [PRIMARY]
    GO

    GRANT  REFERENCES ,  SELECT ,  UPDATE ,  INSERT ,  DELETE  ON [EigeneFirmenSperren]  TO [timsAdmins]
    GO

    hab das skribt geändert wie empfolen siehe oben und am Query Analyzer ausgeführt. Nur wollte der Query Analyzer die Tabelle mit dem Schema dbo nicht erstellen, wegen dieser Fehlermeldung:

    Server: Nachr.-Nr. 2760, Schweregrad 16, Status 1, Zeile 2
    Specified owner name 'dbo' either does not exist or you do not have permission to use it.

    als ich dbo wegnahm wurde Skript erfolgreich ausgeführt nur ich sehe die Tabelle nicht in den Tabellen im Enterprise Manager. Wahrscheinlicht wegen den Filter der auf dbo einschränkt. Aber wie schaffe ich es das er die Tabelle mit dbo macht? Was ich nciht verstehe warum sagt er zum Schema dbo Besitzer?

     

    lg

     

     

    Freitag, 29. Juli 2011 14:29
  • Hallo,

    da hast Du vermutlich keine ausreichenden Rechte.
    Du müsstest Dein Konto in die db_owner bzw. db_ddladmin Rolle packen, siehe CREATE TABLE (Abschnitt Permissions).

    dbo ist das Schema des Datenbankbesitzers und dem Konto zugeordnet, der die Datenbank erstellt hat,
    und immer vorhanden (in der sysusers Tabelle mit id = 1)

    Jedes Benutzerkonto bekommt ein eigenes Schema, das im Standard dem Namen entspricht, siehe sp_grantdbaccess
    Und wenn Du eine Tabelle ohne explizites Schema anlegst, wird der Name des Benutzers verwendet,
    was aber wieder Probleme macht, wenn auch andere darauf zugreifen wollen.

    Wenn Du Dir alle Tabellen (ohne Filter) anzeigen lässt, wirst Du die Tabelle sehen -
    aber es empfiehlt sich, sie wieder zu löschen (DROP TABLE).

    Gruß Elmar

    P. S.: Das gilt nur bis SQL Server 2000, Versionen ab 2005 funktionieren anders,
    falls Du dort in die Dokumentation guckst, passt das nicht immer.

    Freitag, 29. Juli 2011 16:00
    Beantworter
  • Hallo,

     

    wäre es eine Lösung wenn ich meinen User in die Rolle db_owner gebe damit ich die Tabelle erstellen kann und dann wieder rauslösche?

     

    lg

    Dienstag, 2. August 2011 11:16
  • Hallo,

    das wäre eine Möglichkeit oder melde Dich über den Datenbankbesitzer an -
    ich vermeide i. a. zu viele Konten mit DDL Berechtigungen.

    Gruß Elmar

    Dienstag, 2. August 2011 14:52
    Beantworter
  • Hallo,

     

    Danke für die Hilfe, ich werde es so machen.

    • Als Antwort markiert azwinzds1 Freitag, 12. August 2011 09:50
    Freitag, 12. August 2011 09:50