2017-05-15 84 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