2016-05-24 2 views
0

Я хочу использовать процедуру SQL, чтобы вытащить данные из SQL в SAS EG.Специальный символ в хранимой процедуре

Но значение в одном параметре (INVNO) представляет собой TN/2015-16/0005-13, т.е. специальный символ.

Это вызывает ошибку:

ERROR: CLI prepare error: [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '/'. SQL statement: execute 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 подсказки

+1

Если вы можете показать какой синтаксис работает для вашего оператора SQL и какое значение имеет ваша переменная SAS, возможно, кто-то может помочь вам преобразовать значение макропеременной в синтаксис, который вам нужен. – Tom

+0

У вас есть несколько вопросов в вашем сообщении, вы, скорее всего, получите помощь, если сосредоточьтесь на одном за раз. Кроме того, как отметил @Tom, в коде есть много вещей, которые мы не видим, например, макропеременные. Попробуйте сделать пример, который будет воспроизводиться для кого-то с той же настройкой. –

ответ

0

Чтобы ответить на первый вопрос:

Взгляните на: 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; 
Смежные вопросы