Sql 用volatile表在VBA中进行TeraData查询
我正在尝试自动执行一系列查询。一个查询,比如Q1,是有问题的,因为它在select语句之前创建了一个易失性表。在TeraData中,Q1运行正常,但通过VBA将Q1传递给TeraData时,我得到一个错误: 只有ET或null语句在DDL语句之后才是合法的 Q1的形式如下:Sql 用volatile表在VBA中进行TeraData查询,sql,vba,teradata,volatile,recordset,Sql,Vba,Teradata,Volatile,Recordset,我正在尝试自动执行一系列查询。一个查询,比如Q1,是有问题的,因为它在select语句之前创建了一个易失性表。在TeraData中,Q1运行正常,但通过VBA将Q1传递给TeraData时,我得到一个错误: 只有ET或null语句在DDL语句之后才是合法的 Q1的形式如下: create multiset volatile table volatileTable, no fallback, no before journal, no after journal,
create multiset volatile table volatileTable,
no fallback,
no before journal,
no after journal,
(
a1,
a2,
a3,
a4,
a5
) as
(sel
b1,
b2,
b3,
min(b4) as a1,
min(b5) as a2
from
db.table
where
b6 = 'condition'
group by
b1,
b2,
b3
)
with data
on commit preserve rows;
sel
c1,
c2,
c3
from
db.table
group by
1,
2
union
sel
d1,
d2,
d3
from
(sel
e.f1,
e.f2,
e.f3,
e.a1,
s.a1,
e.a2,
s.a2,
e.a3,
s.a3,
e.a4,
s.a4,
e.a5,
s.a5
from
db.table) as e
left outer join volatileTable as s
on
e.a1 = s.a1
e.a2 = s.a2
e.a3 = s.a3
e.a4 >= s.a4
e.a5 <= s.a5
group by
1,
2
union
sel
g1,
g2,
g3
from
db.table
group by
1,
2
union
...
create multiset volatile table volatile,
没有退路,
不,在日记之前,
不,在日记之后,
(
a1,
a2,
a3,
a4,
a5
)作为
(sel
b1,
b2,
b3,
最小值(b4)为a1,
最小值(b5)为a2
从…起
数据库表
哪里
b6=‘条件’
分组
b1,
b2,
b3
)
有数据
在提交保存行上;
选择
c1,
c2,
c3
从…起
数据库表
分组
1.
2.
联盟
选择
d1,
d2,
d3
从…起
(sel
e、 f1,
e、 f2,
e、 f3,
e、 a1,
s、 a1,
e、 a2,
s、 a2,
e、 a3,
s、 a3,
e、 a4,
s、 a4,
e、 a5,
s、 a5
从…起
db.table)作为e
左外连接可挥发为s
在…上
e、 a1=s.a1
e、 a2=s.a2
e、 a3=s.a3
e、 a4>=s.a4
e、 a5您以BT/ET模式连接。执行Q1查询后,执行“ET”命令以结束事务
或者,您可以在Teradata默认模式下进行连接以自动提交查询。您必须在两个单独的请求中发送创建和选择
在ANSI会话中,必须添加提交在提交后创建保留行
要从ANSI切换到Teradata会话,您需要切换到会话模式=Teradata强>
如果您使用的是Teradata模式会话,则不需要BT/ET,因为每个请求都是隐式事务。我已尝试在BT和ET中包装Q1。我还尝试在BT和ET中包装create VOLIATE语句。这两种模式都会给我原帖中描述的错误。如何选择通过VBA连接Teradata的模式?我当前的VBA连接读取connection.Open“数据源=environment;数据库=db;持久安全信息=True;用户ID=UID;密码=PW;会话模式=ANSI;”
对,我想是的。但问题仍然存在:为什么在DDL错误后我会得到no DML?如何在一个Teradata会话中发送两个单独的请求?现在,我有一个执行行读取recordSet=cmdSQL.execute()
。请原谅,我只是在学习如何通过VBA访问Teradata。在上面的评论中:cmdSQL.CommandText=queryFromFile
将queryFromFile
作为字符串和cmdSQL.commandType=adCmdText
。必须有两个单独的执行请求,一个用于创建为…
,另一个用于选择。