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

6
我最近发现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;

我遇到了这个错误: ERROR 22-322:语法错误,期望以下之一:名称、(、)、','、ANSIMISS、AS、CROSS、EXCEPT、FULL、GROUP、HAVING、INNER、INTERSECT、JOIN、LEFT、NATURAL、NOMISS、OUTER、RIGHT、UNION、WHERE。 ERROR 200-322:符号未被识别将被忽略。 有人可以帮忙吗? 非常感谢!
3个回答

5

SAS无法处理三级名称。

您需要在libname部分中指定模式/数据库。您有几个选项(阅读文档以获取所有选项)。

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

libname pdata odbc complete='DSN=SQLServerProd;Database=MyDatabase';
< p > complete=选项允许您指定完整的ODBC连接字符串。这应该允许您指定数据库/模式。


2

EDW_XYZ_PROD01是一个模式(schema)吗?

我认为你可能需要在datasource=选项中进行指定。例如:

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

0

你尝试过在libname语句中使用schema=选项吗?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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接