SAS libname odbc,如何访问两级名称表

时间:2015-01-27 18:41:40

标签: odbc sas

我最近发现libname语句非常方便访问odbc中驻留的表。但我不知道如何访问具有两级名称的表。以下是一个例子。

我使用的旧代码(此代码有效):

proc sql;
    connect to odbc(dsn=edw_nz user=&username. pw=&password.);

    create table test select * from connection to odbc(
        select  *
        from EDW_XYZ_PROD01..Table_xyz);
quit;

现在,我想使用libname工具访问odbc:

libname edw odbc database=edw_nz user=&username. pw=&password.;
proc sql;
    create table test as
        select *
        from edw.EDW_XYZ_PROD01..Table_xyz;
quit;

我收到了这个错误: 错误22-322:语法错误,期望以下之一:名称,(,),',',ANSIMISS,AS,CROSS,EXCEPT,FULL,GROUP,HAVING,INNER,INTERSECT,JOIN,LEFT,NATURAL,NOMISS ,外,右,联盟,在哪里。 ERROR 200-322:符号无法识别,将被忽略。

任何人都可以提供帮助吗? 非常感谢!

3 个答案:

答案 0 :(得分:5)

SAS无法处理3级名称。

您需要在libname部分中指定架构/数据库。您有几个选项(阅读所有选项的文档)。

我们使用ODBC连接到我们的SQL服务器实例,如下所示:

libname pdata odbc complete='DSN=SQLServerProd;Database=MyDatabase';

complete=选项允许您指定完整的ODBC连接字符串。这应该允许您指定数据库/模式。

答案 1 :(得分:1)

EDW_XYZ_PROD01是架构还是什么?

我认为您可能必须在datasource =选项上指定它。例如:

libname mydblib odbc user=testuser password=testpass datasrc=mydatasource;

答案 2 :(得分:0)

您是否尝试过libname语句中的schema =选项。架构等同于第一级名称。

libname edw odbc database=edw_nz user=&username. pw=&password. schema=edw;

proc sql;
  create table test as
    select *
    from EDW_XYZ_PROD01..Table_xyz;
quit;