【问题标题】:Special character in stored procedure存储过程中的特殊字符
【发布时间】:2016-05-24 09:33:51
【问题描述】:

我想使用 SQL 过程将数据从 SQL 拉到 SAS EG。

但是一个参数(INVNO)的值是TN/2015-16/0005-13,即特殊字符。

这导致错误:

错误:CLI 准备错误:[Microsoft][ODBC SQL Server Driver][SQL Server]第 1 行:'/' 附近的语法不正确。 SQL语句:执行SAS_INV_RPT AMRUTFAC, SDAB, 1, TN05/000023/14-15, TN05/000024/14-15。

任何人都可以为此想出一个解决方法吗?

PROC SQL; 
   CONNECT TO ODBC (DSN='AHCLOD' uid=&uid pwd=&pwd); 
   CREATE TABLE sas_inv_rpt AS 
   SELECT * FROM connection to ODBC (
      execute SAS_INV_RPT 
         &COMPANY_CODE, 
         &LOCATION_CODE, 
         &LANG_ID, 
         &INVNO_min, 
         &INVNO_max); 
   DISCONNECT FROM ODBC; 
QUIT;

我也可以使用 INVNO_min 和 INVNO_max 提示的文本值范围

【问题讨论】:

  • 如果您可以展示哪些语法适用于您的 SQL 语句以及您的 SAS 宏变量具有什么值,也许有人可以帮助您将宏变量值转换为您需要的语法。
  • 您的帖子中有几个问题,如果您一次专注于一个问题,您更有可能获得帮助。此外,正如@Tom 指出的那样,您的代码中有很多我们看不到的东西——例如宏变量。尝试为具有相同设置的人制作一个可重现的示例。

标签: sql database stored-procedures sas


【解决方案1】:

回答第一个问题:

看看:SAS %QUOTE and %NRQUOTE MACRO Functions

PROC SQL; 
    CONNECT TO ODBC (DSN='AHCLOD' uid=&uid pwd=&pwd); 
    CREATE TABLE sas_inv_rpt AS 
        SELECT * FROM connection to ODBC 
        (execute 
           SAS_INV_RPT 
           &COMPANY_CODE, 
           &LOCATION_CODE, 
           &LANG_ID, 
           %QUOTE(&INVNO_min),  /* Mask any special chars in the resolved text*/
           %QUOTE(&INVNO_max) ); 
    DISCONNECT FROM ODBC; 
    QUIT; 
    RUN;

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2021-12-13
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多