【问题标题】:SAS libname odbc, how to access a two-level name tableSAS libname odbc,如何访问二级名称表
【发布时间】:2023-03-13 07:07:01
【问题描述】:

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

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

【问题讨论】:

    标签: odbc sas


    【解决方案1】:

    SAS 无法处理 3 级名称。

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

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

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

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

    【讨论】:

      【解决方案2】:

      EDW_XYZ_PROD01 是模式还是什么?

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-11-03
          • 1970-01-01
          • 2018-08-21
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 2022-10-23
          • 1970-01-01
          相关资源
          最近更新 更多