T-SQL“在这种情况下无法访问<tablename>”是什么意思? (SQL代码:1001042)</tablename>

时间:2011-12-07 00:22:30

标签: sql tsql sybase-iq

使用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网站has no further explanation

2 个答案:

答案 0 :(得分:1)

您可以发布存储过程的定义吗?下面的测试对我来说是成功的,尽管我使用的是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'));

完全披露:我在SQL Anywhere工程中为Sybase工作。

答案 1 :(得分:1)

问题是由我的目标表有一个检查约束引起的。

以下是重新创建问题的示例:

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'));