Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.303 Beiträge
 
Delphi 12 Athens
 
#1

Tabellenname als Variable im Script, SQL

  Alt 19. Mär 2014, 15:29
Datenbank: NEXUS • Version: 3 • Zugriff über: SQL
Hallo...

Hintergrund:
http://www.delphipraxis.net/179605-a...n-per-sql.html

Das Script:
...geht alle Tabellen durch, guckt ob AutoInc Feld vorhanden, wenn ja, Feldnamen holen und den AutoInc korrigieren. Das ist der Gedanke.
Code:
DECLARE @aTableName VARCHAR(100);
DECLARE @aAutoIncField VARCHAR(100);
DECLARE @aFieldName VARCHAR(100);

DECLARE TableCursor CURSOR FOR
    SELECT table_name FROM #tables WHERE AutoInc_Engine <> '';
OPEN TableCursor;
FETCH NEXT FROM TableCursor INTO @aTableName;
WHILE @@FETCH_STATUS = 0 DO
    DECLARE FieldCursor CURSOR FOR
        SELECT field_name FROM #fields where table_name = @aTableName and field_type_nexus = 'nxtAutoInc';
    OPEN FieldCursor;
    FETCH NEXT FROM FieldCursor INTO @aAutoIncField;
    IF @@FETCH_STATUS = 0 THEN
        ALTER TABLE @aTableName ALTER COLUMN @aAutoIncField CAST AS Integer IGNORE; <--
        ALTER TABLE @aTableName ALTER COLUMN @aAutoIncField CAST AS AutoInc IGNORE; <--
    END IF;
    CLOSE FieldCursor;
    FETCH NEXT FROM TableCursor INTO aTableName;
END WHILE;
CLOSE TableCursor;
Fehler im Alter Table Statement:
Die Variablen @TableName und @AutoIncField werden vom Parser direkt als Namen verwendet. Wie kann ich die Variablen als Tabellenname bzw. Feldname verwenden?

Danke für Info´s


Lösung gefunden:
... selbst zusammenbauen und als SQL String übergeben
Code:
IF @@FETCH_STATUS = 0 THEN
    EXECUTE IMMEDIATE 'ALTER TABLE ' + @aTableName + ' ALTER COLUMN ' + @aAutoIncField + ' CAST AS Integer IGNORE';
    EXECUTE IMMEDIATE 'ALTER TABLE ' + @aTableName + ' ALTER COLUMN ' + @aAutoIncField + ' CAST AS AutoInc IGNORE';
END IF;

Geändert von haentschman (19. Mär 2014 um 16:06 Uhr)
  Mit Zitat antworten Zitat