使用proc sql中的宏与ODBC连接到Access数据库

时间:2014-12-06 00:46:58

标签: sas proc-sql

我有一个名为fileName的宏变量。我试图在proc sql中使用它,它通过ODBC连接到Access数据库。但是,我所拥有的代码有错误或无法识别宏变量。

这是我的代码:

%let fileName=MYFILE.NAME
proc sql;
connect to odbc ("DSN=MS Access Database;"||
               "DBQ=&dbname;"||
               "FIL=MS Access;" ||
               "MaxBufferSize=512;" ||
               "PageTimeout=600;" ||
               "UID=admin");
create table t1 as
select * from connection to odbc
(SELECT * FROM tableA
where FileName='&fileName');
quit;

返回0行。如果我用查询中的实际值替换宏变量,它将返回包含正确数据的1行。

如果我在& fileName周围使用双引号,我会收到以下错误: 错误:CLI描述错误:[Microsoft] [ODBC Microsoft Access驱动程序]''不是有效的名称。确保它没有        包括无效字符或标点符号,并且不会太长。

有谁能告诉我应该如何将宏变量传递给查询?感谢。

3 个答案:

答案 0 :(得分:1)

外部DBMS不像SAS那样处理单引号和双引号:双引号包含变量名,而单引号包含字符串 - 您不能使用双引号来解析宏并将此结果用作i中的字符串; e。一个where子句。 你应该编码

%let schema = SCOTT; owner =%unquote(%str(%'& schema%'))

请参阅http://support.sas.com/techsup/notes/v8/00/539.html

答案 1 :(得分:0)

如果要解析宏变量,则需要确保它不包含在单引号内。这一行:

where FileName='&fileName');

......需要:

where FileName="&fileName");

答案 2 :(得分:0)

尝试条带化前导和尾随空格,因为它们是由输入缓冲区创建的。

where FileName = "%sysfunc(strip(&fileName))"  );