2016-10-18 3 views
1

Ich versuche, den folgenden Code auszuführen mit isql ausführen:Kann nicht SQL-Datei

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'SFPTB051_ABERTURARCLH')) 
BEGIN 
    SELECT * FROM SFPTB051_ABERTURARCLH; 
END 

Die Art, wie ich so mache:

isql -i sql_scripts/test.sql _input/mygdb.GDB -user SYSADM -pass masterkey 

Ausgang:

Statement failed, SQLSTATE = 42000 
Dynamic SQL Error 
-SQL error code = -104 
-Token unknown - line 1, column 1 
-IF 
At line 1 in file sql_scripts/test.sql 
Expected end of statement, encountered EOF 

Irgendwelche Ideas?

Danke!

UPDATE ---

Ich versuche folgendes:

SET TERM # ; 

EXECUTE BLOCK AS 
BEGIN 
    SELECT * FROM SFPTB051_ABERTURARCLH 
END# 

SET TERM ; # 

Aber es zurückschicken:

Statement failed, SQLSTATE = 42000 
Dynamic SQL Error 
-SQL error code = -104 
-Token unknown - line 4, column 1 
-END 
+0

'if' kann nur in einem sproc verwendet werden. Es ist kein gültiger Abfragebefehl. –

+0

Werfen Sie einen Blick auf 'EXECUTE BLOCK'. Es sollte den Trick machen. –

+0

Können Sie mir ein Beispiel geben? –

Antwort

1

Normalerweise wählen Sie Anweisungen innerhalb einer Blockanweisung müssen ihre Werte zurückgeben . Zum Beispiel können Sie sie in Variablen zurückgeben oder Werte zurückgeben, die fast gleich sind.

Darüber hinaus muss jede Anweisung innerhalb einer Blockanweisung durch ein Semikolon (;) beendet werden.

Ihr Block Aussage könnte wie folgt aussehen:

SET TERM # ; 

EXECUTE BLOCK AS 
DECLARE VARIABLE FIELD1 TYPE OF COLUMN SFPTB051_ABERTURARCLH.FIELD1; 
/* declare more variables as needed */ 
BEGIN 
    FOR 
    SELECT FIELD1 
    FROM SFPTB051_ABERTURARCLH 
    INTO :FIELD1 
    DO 
    BEGIN 
    /* do something with the variables values */ 
    END 
END# 

SET TERM ; #