0

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

这是我的代码:

%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 Driver] '' is not a valid name。确保它不包含无效字符或标点符号,并且不要太长。

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

4

3 回答 3

1

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

%让架构=斯科特;其中所有者 = %unquote(%str(%'&schema%'))

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

于 2018-03-06T11:46:11.280 回答
0

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

where FileName='&fileName');

...需要是:

where FileName="&fileName");
于 2014-12-08T21:01:17.493 回答
0

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

where FileName = "%sysfunc(strip(&fileName))"  );
于 2018-03-06T12:04:57.353 回答