我不确定为什么在尝试连接到 odbc 时会出错
过程 sql; 24 create table xxx.test as 25 (select * from nxxxe.nxrxxt);
1) 连接成功 2) libref 成功
我没有执行任何查询。我怎么会有语法错误?我什至没有)
我不确定为什么在尝试连接到 odbc 时会出错
过程 sql; 24 create table xxx.test as 25 (select * from nxxxe.nxrxxt);
1) 连接成功 2) libref 成功
我没有执行任何查询。我怎么会有语法错误?我什至没有)
您的查询中确实有括号;尝试删除它们:
proc sql;
create table kyle.test as
select *
from noagree.no_agreement_list;
quit;
但是从一张小桌子开始尝试这个。此外,特别是对于 Teradata,指定索引非常重要。使用您拥有的代码,数据集中的第一个 SAS 变量将用作索引。选择不当的索引可能会对您的数据库产生严重的负面影响(影响其他用户以及您自己。
我自己使用 SAS/Access to Teradata,所以我不知道这些选项是否可用于 ODBC,但这里有一个如何显式定义索引和各种列类型的示例:
data kyle.test
( dbcreate_table_opts='primary index(INDEX_COLUMN)'
dbtype=( INDEX_COLUMN='INTEGER NOT NULL'
, USER_NAME='VARCHAR(120) CHARACTER SET LATIN NOT CASESPECIFIC'
, PHONE_NUMBER='CHAR(10)'
, CONTACT_DATE="DATE FORMAT 'yyyy-mm-dd'"
, FROM_LINE_NUM='SMALLINT'
, DOLLAR_DATA='DECIMAL(15,2)'
)
);
set noagree.no_agreement_list;
run;
请注意,这使用正常的 SAS 数据步骤,而不是PROC SQL
; 数据集中未在dbtype
选项中列出的任何变量都将使用标准 SAS 转换进行复制。
最后,一旦你让它工作,一定要运行一个“收集统计数据”步骤,你可以使用 SQL 助手工具 (SQLA) 来完成。我假设您可以访问 SQLA,特别是如果您对某些数据库具有写入权限。