2013-10-03 3 views
1

Я не уверен, почему у меня была ошибка при попытке подключения к odbcКак правильно подключиться к базе данных?

proc sql; 24 create table xxx.test как 25 (выберите * из nxxxe.nxrxxt);

1) соединение успешно 2) libref успешного

Я не выполнял никаких запросов. Почему у меня есть синтаксическая ошибка? У меня даже не было )

ответ

2

В вашем запросе есть круглые скобки; попробуйте удалить их:

proc sql; 
create table kyle.test as 
select * 
from noagree.no_agreement_list; 
quit; 

Но попробуйте это с маленьким столиком для начала. Кроме того, особенно с Teradata, очень важно указать индекс. Используя код, который вы используете, первая переменная SAS в наборе данных будет использоваться в качестве индекса. Плохо подобранный индекс может иметь серьезные негативные последствия для вашей базы данных (как для других пользователей, так и для вас самих.

Я использую SAS/Access для Teradata самостоятельно, поэтому не знаю, доступны ли эти опции с ODBC, но здесь пример того, как явным образом определить индекс и различные типы столбцов:

data kyle.test 
    (dbcreate_table_opts='primary index(INDEX_COLUMN)' 
     dbtype=(INDEX_COLUMN='INTEGER NOT NULL' 
       , USER_NAME='VARCHAR(120) CHARACTER SET LATIN NOT CASESPECIFIC' 
       , PHONE_NUMBER='CHAR(10)' 
       , CONTACT_DATE="DATE FORMAT 'yyyy-mm-dd'" 
       , FROM_LINE_NUM='SMALLINT' 
       , DOLLAR_DATA='DECIMAL(15,2)' 
      ) 
    ); 
    set noagree.no_agreement_list; 
run; 

Примечание это использует обычный SAS шаг данных, а не PROC SQL, любая переменная в наборе данных, которые не перечислены в опции dbtype будут скопированы используя стандартное преобразование SAS.

И, наконец, onc e вы получите это для работы, обязательно запустите шаг «сбор статистики», который вы можете сделать, используя инструмент SQL Assistant (SQLA). Я предполагаю, что у вас есть доступ к SQLA, особенно если у вас есть разрешение на запись в какую-либо базу данных.

Смежные вопросы