T-SQL, что означает "<tablename> не доступен в этом контексте"?(Код SQL: 1001042) - PullRequest
3 голосов
/ 07 декабря 2011

Использование Sybase IQ 12.5,

Когда я пытаюсь вставить результат сохраненного процесса в таблицу, подобную этой:

INSERT mytable (column1, column2, column3)
SELECT column1, column2, column3
FROM (myproc('AAA'))

, я получаю следующее:

ASA Error -1001042: Table, 'mytable', is not accessible in this context. 

Сайт Sybase не имеет дальнейших объяснений

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Проблема была вызвана тем, что у моей целевой таблицы было ограничение проверки.

Вот пример для воссоздания проблемы:

create table mytable (column1 int, 
    column2 int, 
    column3 int CHECK (column3 in (1,2,3)));

create procedure myproc( parm varchar(10))
  result ( column1 int, column2 int, column3 int)
  begin
     select 1,2,3;
 end;
INSERT mytable (column1, column2, column3)
  SELECT column1, column2, column3
  FROM (myproc('AAA'));
1 голос
/ 07 декабря 2011

Можете ли вы опубликовать определение вашей хранимой процедуры? Тест ниже был для меня успешным, хотя я использовал Sybase SQL Anywhere (я пробовал версии 12.0.1 и 11.0.1). Сервер Sybase IQ основан на механизме выполнения SQL Anywhere, так что это должен быть эквивалентный тест, хотя я не уверен, какая версия SQL Anywhere соответствует IQ 12.5.

create table mytable (column1 int, column2 int, column3 int);
create procedure myproc( parm varchar(10))
  result ( column1 int, column2 int, column3 int)
  begin
     select 1,2,3;
  end;
INSERT mytable (column1, column2, column3)
  SELECT column1, column2, column3
  FROM (myproc('AAA'));

Полное раскрытие: я работаю в Sybase в SQL Anywhere engineering.

...