如何在C#中使用单个字符串运行多个Teradata SQL语句?

时间:2018-02-07 16:06:21

标签: c# teradata

我知道我可以使用每个ExecuteNonQuery()语句运行它们,但我被要求运行一个包含许多语句的大型文本文件。了解SQL(不是程序员)的用户将在查询将来更改时更新文件。

典型的文件包含大量CREATE VOLATILE TABLE个语句,其中散布了INSERT个,DELETE个和UPDATE个。如果我按照以下方式尝试此操作,我会[Teradata Database] [3932] Only an ET or null statement is legal after a DDL Statement.在其中一个或两个语句仍返回相同错误后添加ET;

using (TdConnection tdConnection = new TdConnection())
{
    TdConnectionStringBuilder conn = new TdConnectionStringBuilder()
    {
        DataSource = "XXXXX",
        UserId = "ID",
        Password = "PW",
        AuthenticationMechanism = "LDAP",
        ConnectionPooling = false
    };

    tdConnection.ConnectionString = conn.ConnectionString;
    tdConnection.Open();

    TdCommand command = new TdCommand(@"
        CREATE VOLATILE TABLE ABC AS
        (
        ...
        )
        WITH DATA PRIMARY INDEX(ABC_ID)
        ON COMMIT PRESERVE ROWS;

        DELETE FROM ABC;
    ", tdConnection)
    {
        CommandTimeout = 0
    };

    command.ExecuteNonQuery();
}

我看到"多语句"在documentation中有效,但我似乎无法理解为什么它在这种情况下不起作用。如果我从Teradata SQL Assistant而不是代码运行它,它确实有效。

我也明白这不是实现这一目标的理想方式。我知道我可以单独加载语句或使用存储过程,但在这种情况下,我没有在设计中做出选择。

0 个答案:

没有答案