2017-05-15 97 views
0

我正在尝试创建一些部署工具,但我不想使用BTEQ。我一直在尝试使用PowerShell中的Teradata.Client.Provider,但是在创建表时出现语法错误。如何在不使用BTEQ的情况下在Teradata中使用IF语句

[Teradata Database] [3706] Syntax error: expected something between ';' and the 'IF' keyword.

SELECT * FROM DBC.TablesV WHERE DatabaseName = DATABASE AND TableName = 'MyTable'; 
IF ACTIVITYCOUNT > 0 THEN GOTO EndStep1; 

CREATE MULTISET TABLE MyTable , 
    NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
     (
      MyColId   INTEGER GENERATED ALWAYS AS IDENTITY 
                (START WITH 1 
                INCREMENT BY 1 
                MINVALUE 0 
                MAXVALUE 2147483647 
                NO CYCLE) 
                NOT NULL, 
      MyColType   VARCHAR(50)  NULL, 
      MyColTarget  VARCHAR(128) NULL, 
      MyColScriptName VARCHAR(256) NULL, 
      MyColOutput  VARCHAR(64000) NULL, 
      isMyColException BYTEINT(1)  NULL, 
      ExceptionOutput   VARCHAR(64000) NULL, 
      MyColBuild   VARCHAR(128) NULL, 
      MyColDate   TIMESTAMP  NOT NULL 
     ) 
    PRIMARY INDEX PI_MyTable_MyColLogId(MyColLogId); 

LABEL EndStep1; 

我宁可不使用BTEQ,因为我没有发现它已经很好运作在其他部署工具,我们已经创建并需要一些黑客。有什么我可以使用,避免使用该工具?

回答

1

什么解析错误

的CREATE将无法在ExceptionOutputMyColId由于双INTEGERVARCHAR(max),它在Teradata的一个未知的数据类型。

+0

我纠正了这些错误,但得到这个错误:[Teradata Database] [3706]语法错误:预计在';'之间;和'IF'关键字。我更新了这个问题来反映这一点。 – Russ960

+0

当然,'IF'是BTEQ语法的一部分,您需要将逻辑移入PowerShell。运行Select,检查它是否返回一行,否则运行CREATE ... – dnoeth

+0

好的。这证实了我的理解,即任何工具中都没有任何工具可以通过BTEQ使用这个工具,或者在执行之前执行我的逻辑。 – Russ960

相关问题