Announcement

Collapse
No announcement yet.

Column-DataType prüfen um evtl. ALTER auszuführen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Column-DataType prüfen um evtl. ALTER auszuführen

    Hi,

    we baue ich das zusammen in einem SQL Befehl auf?

    Ich will prüfen ob bei der Tabelle "MYTABLE" die Spalte "BESCHREIBUNG" den Datentyp "nchar" hat
    wenn das nicht der Fall ist, dann soll der "ALTER TABLE" ausgeführt werden




    1. ich wollte den System stored procedures verwenden:
    EXEC sp_columns @table_name = 'MYTABLE', @COLUMN_NAME = 'BESCHREIBUNG'


    2. und dann bei Bedarf den ALTER ausführen
    ALTER TABLE MYTABLE ALTER COLUMN [BESCHREIBUNG] [nchar] (300)



    Wie kann ich nun in einem SQL Befehl den Column-DataType prüfen
    und bei Bedarf den ALTER ausführen?


    Also so ungefähr:
    (nur ich weis nicht wie ich die erste Prüfung machen kann)


    IF (MYTABLE.BESCHREINUNG = nvarchar)
    ALTER TABLE MYTABLE ALTER COLUMN [BESCHREIBUNG] [nchar] (300);


    grüße
    Rayman

  • #2
    Wieso muß das eine Befehl sein? Was strört dich an 2 Befehlen?

    Handelt es sich eigentlich um MS SQL Server?

    Comment


    • #3
      weil ich den auch so ähnlich aufbauen wolle
      und nur einmal den ExecuteNonQuery() im c# code aufrufen wollte:


      Code:
      string alterSql = "if not exists (SELECT * FROM SYSCOLUMNS WHERE ID IN (SELECT ID FROM sysobjects WHERE NAME='MYTABLE') AND NAME='Flag') " +
                  		"ALTER TABLE MYTABLE ADD [Flag] [char](1)";
      
      cmd = new SqlCommand(alterSql, con);
      cmd.ExecuteNonQuery();



      Ja, es ist ein MS SQL Server 2005

      Comment


      • #4
        so wollte ich es haben:


        Code:
        IF not exists ( select * from 	INFORMATION_SCHEMA.COLUMNS 
        where	TABLE_NAME 	= 'MYTABLE' 
        AND 	COLUMN_NAME 	= 'BESCHREIBUNG' 
        AND	DATA_TYPE	= 'nchar') 
           ALTER TABLE MYTABLE alter column BESCHREIBUNG NCHAR(300)  ;


        hier prüfe ich in einen SQL Befehl, den Column DatenType und ändere den dann Bei bedarf ab

        Comment


        • #5
          Originally posted by Rayman View Post
          so wollte ich es haben:


          Code:
          IF not exists ( select * from 	INFORMATION_SCHEMA.COLUMNS 
          where	TABLE_NAME 	= 'MYTABLE' 
          AND 	COLUMN_NAME 	= 'BESCHREIBUNG' 
          AND	DATA_TYPE	= 'nchar') 
             ALTER TABLE MYTABLE alter column BESCHREIBUNG NCHAR(300)  ;


          hier prüfe ich in einen SQL Befehl, den Column DatenType und ändere den dann Bei bedarf ab
          ganz so trivial wird es nicht gehen...

          Wenn die betreffende Spalte in Indexen vorkommt, dessen Definition sichern
          und den Index löschen
          Wenn auf der betreffenden Spalte Default- und Check-Constraints liegen, dann ebenfalls die Definitionen sichern.
          Neue Spalte under Namen 'beschreibung_Neu' anlegen.
          Mittels Update die Daten von der alten Spalte in die neue kopieren,
          Alte Spalte droppen, neue Spalte umbenennen in 'Beschreibung'
          Die gesicherten Constraints wieder erstellen
          Die gesicherten Indexe wieder erstellen

          das wars ungefähr...

          Comment


          • #6
            ja, stimmt - wenn die Splate (bzw. der Inhalt) auch irgendwo indeziert wurde
            dann ist dein Schritt sicherlich Sinnvoller um weiterhin ein redundantes system zu haben


            in meinem Fall,
            werden die Tabelleninhalte von Zeit zu Zeit komplett gelöscht und neu aufgebaut weil es eine temporäre Datenbank ist

            trotzdem Danke für den Tipp!

            Comment

            Working...
            X