1

我不确定为什么在尝试连接到 odbc 时会出错

过程 sql; 24 create table xxx.test as 25 (select * from nxxxe.nxrxxt);

1) 连接成功 2) libref 成功

我没有执行任何查询。我怎么会有语法错误?我什至没有)

4

1 回答 1

2

您的查询中确实有括号;尝试删除它们:

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,特别是如果您对某些数据库具有写入权限。

于 2013-10-03T22:22:58.790 回答