我最近发现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:符号无法识别,将被忽略。
任何人都可以提供帮助吗? 非常感谢!
答案 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;