Seite 1 von 1

Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 16:46
von Manfred
da ich gerade dabei bin
das hier habe ich im ARC unter SQl Script versucht, es will aber nicht. Wo hakt es bei mir?

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables;

while fetch @t do
	  @c = 'alter table '+ @t.name ADD COLUMN lastupdate modtime;
	  execute immediate @c;
end;

close @t;

Re: Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 16:48
von Marcus Herz

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables;

while fetch @t do
	  @c = 'alter table '+ @t.name +' ADD COLUMN lastupdate modtime';
	  execute immediate @c;
end;

close @t;

Re: Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 16:51
von Manfred
Danke,
als ich es las fiel es mir wie Schuppen aus den Haaren.

Re: Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 16:54
von Manfred
ok, ich bin jetzt unverschämt.
Wie frage ich vorher noch ab, ob es die Spalte schon gibt?

Re: Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 16:59
von Marcus Herz

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables
and not name in (select parent from system.columns where name = 'lastupdate');

while fetch @t do
	  @c = 'alter table '+ @t.name +' ADD COLUMN lastupdate modtime';
	  execute immediate @c;
end;

close @t;
oder mit try

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables;

while fetch @t do
	  @c = 'try alter table '+ @t.name +' ADD COLUMN lastupdate modtime; catch all end try;';
	  execute immediate @c;
end;

close @t;

Re: Spalten einfügen in Schleife

Verfasst: Di, 13. Sep 2022 17:38
von nightcrawler

Code: Alles auswählen

if exists (select * from system.columns where name='F1' and Parent = 'TabelleC') then
 select true from system.iota;
else
 select false from system.iota;
 end if; 

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 10:00
von Manfred
ok,
noch ein Problem, wie erweitert man den Befehl wenn man den Default Wert auf
DToC(Date()) + " " Time()
setzen will? Irgendwie klappt das bei mir nicht.

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 10:35
von nightcrawler
hallo Manfred,
wenn ich die genaue Syntax suche, erweitere ich das Feld im ARC und exportiere die Tabelle nach SQL (rechte Maustaste im ADD-Baum, dann Generate SQL Script).

Code: Alles auswählen

EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'tabelle', 
      'feld', 'Field_Default_Value', 
      'DToC(Date()) + " " Time()', 'APPEND_FAIL', 'tabelle_faill' ); 

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 10:37
von Manfred
so mache ich das ja auch, aber das paßt doch nicht zu den Befehlen, die weiter oben stehen. :confused2:

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 12:03
von nightcrawler
Manfred hat geschrieben: Mi, 14. Sep 2022 10:37 so mache ich das ja auch, aber das paßt doch nicht zu den Befehlen, die weiter oben stehen. :confused2:
a bissle Transferleistung sollte schon sein. Welches Feld, welche Tabelle soll den Defaultwert bekommen?

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 12:09
von Manfred
ach so,
ich dachte das wäre klar. Es bezog sich auf das Beispiel mit dem modtime von Markus weiter oben.

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 12:24
von Marcus Herz

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables
and name in (select parent from system.columns where name = 'feld');

while fetch @t do

	  @c = 'EXECUTE PROCEDURE sp_ModifyFieldProperty ( '''+ @t.name +'''',
	      ''feld'', ''Field_Default_Value'', 
	      ''DToC(Date()) + ''' '''+ Time()'', ''NO_VALIDATE'', NULL )'; 	  
	  execute immediate @c;
end;

close @t;

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 12:27
von Manfred
hi marcus,
danke, aber das ist modify, ich wollte das direkt bei add column machen

Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 12:31
von Marcus Herz
Ein modtime brauchst du nicht mir defalut belegen. Bei ADT ist der Default Wert now()

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables
and not name in (select parent from system.columns where name = 'lastupdate');

while fetch @t do
	  @c = 'alter table '+ @t.name +' ADD COLUMN lastupdate modtime default ''now()''' ;
	  execute immediate @c;
end;

close @t;


Re: Spalten einfügen in Schleife

Verfasst: Mi, 14. Sep 2022 16:37
von nightcrawler
Manfred hat geschrieben: Mi, 14. Sep 2022 12:27 danke, aber das ist modify, ich wollte das direkt bei add column machen
Syntax hier: https://devzone.advantagedatabase.com/d ... _table.htm
mit dem Beispiel DEFAULT:

Code: Alles auswählen

ALTER TABLE demo10
ADD COLUMN test char(20)
 DEFAULT ‘abcde’
 CONSTRAINT MINIMUM ‘A’
 CONSTRAINT MAXIMUM ‘z’
 CONSTRAINT NOT NULL
CONSTRAINT error message ‘A bad value was input for the column named test’ 
hier statt eines Wertes die Funktionen eintragen.
EDIT: Hier geht nur String-Literal, also bleibst bei MODIFY wie oben.

Re: Spalten einfügen in Schleife

Verfasst: Di, 09. Mai 2023 14:15
von Manfred
was mache ich falsch, das hier bei:

Code: Alles auswählen

declare @c string;
declare @t cursor;

open @t as select * from system.tables
and not name in (select parent from system.columns where name = 'tarifcode');

while fetch @t do
	  @c = 'alter table '+ @t.name + ' ADD COLUMN tarifcode Char(3)';
	  execute immediate @c;
end;

close @t;
bei and not name
diese fehlermeldung im Architekten kommt
poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2117; [SAP][Advantage SQL Engine]Unexpected token: and -- Expecting semicolon. -- Location of error in the SQL statement is: 79 (line: 5 column: 1)

Re: Spalten einfügen in Schleife

Verfasst: Di, 09. Mai 2023 14:36
von nightcrawler
ersetzen durch where name not in ...

Re: Spalten einfügen in Schleife

Verfasst: Di, 09. Mai 2023 14:48
von Manfred
du bist mal wieder wie immer der größte :binky: