我知道我可以使用每个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而不是代码运行它,它确实有效。
我也明白这不是实现这一目标的理想方式。我知道我可以单独加载语句或使用存储过程,但在这种情况下,我没有在设计中做出选择。