SAS libname odbc,如何访问二级名称table

SAS libname odbc, how to access a two-level name table

我最近发现 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: 符号无法识别,将被忽略。

有人可以帮忙吗? 非常感谢!

EDW_XYZ_PROD01 是模式还是什么?

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

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

SAS 无法处理 3 个级别名称。

您需要在 libname 部分中指定 schema/database。您有几个选项(阅读所有选项的文档)。

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

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

complete= 选项允许您指定完整的 ODBC 连接字符串。这应该允许您指定 database/schema.

您是否尝试过 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;